AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MS-SQL-Server und ungewöhnliches Verhalten bei Like-Abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

MS-SQL-Server und ungewöhnliches Verhalten bei Like-Abfragen

Ein Thema von Bernhard Geyer · begonnen am 23. Mär 2004 · letzter Beitrag vom 30. Mär 2004
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#1

MS-SQL-Server und ungewöhnliches Verhalten bei Like-Abfragen

  Alt 23. Mär 2004, 11:01
Folgendes mir unerklärliches Verhalten stelle ich am MS-SQL-Server fest:

In der Tabelle mytable in der Spalte myCol (nvarchar) ist der Wert '010101'.


Ich frage die Datenbank mit folgender Query ab:

exec sp_executesql N'select * from mat where (m_matnr like @P1 )', N'@P1 nvarchar(50)', N'0101%Ѐ' (Ѐ = #$0400).

Die Abfrage muss mittels exec sp_...-Ausgeführt werden da sonst die Unicode-Zeichen überhaupt nicht durchkommen (anderes "Feature" 8) von MS-SQL).

Nach meinen Verständnis sollte doch der obige Datensatz nicht als Ergebnis geliefert werden, da das Zeichen #$0400 ja nicht im String '010101' vorhanden ist. Kommt er aber!

Wird statt #$0400 z.B. E ('0101%E') verwendet, so kommt der Datensatz nicht zurück.
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: MS-SQL-Server und ungewöhnliches Verhalten bei Like-Abfr

  Alt 23. Mär 2004, 15:19
Zitat MSSQL-OH:
Zitat:
LIKE unterstützt Mustervergleiche im ASCII- und Unicodeformat. Sind alle Argumente (match_expression, pattern und gegebenenfalls escape_character) ASCII-Zeichen, wird ein ASCII-Mustervergleich durchgeführt. Wenn eines der Argumente von einem Unicode-Datentyp ist, werden alle Argumente in Unicode konvertiert und ein Unicode-Mustervergleich durchgeführt. Wenn Sie beim LIKE-Operator Unicode-Daten (nchar- oder nvarchar-Datentypen) verwenden, werden nachfolgende Leerzeichen berücksichtigt. Bei Daten, die nicht vom Typ Unicode sind, werden nachfolgende Leerzeichen ignoriert. Der Unicode-LIKE-Operator ist mit dem SQL-92-Standard kompatibel. Der ASCII-LIKE-Operator ist mit früheren Versionen von SQL Server kompatibel.

Die folgenden Beispiele verdeutlichen die Unterschiede der zurückgegebenen Zeilen beim Durchführen von Mustervergleichen mit ASCII- und Unicode-LIKE-Operatoren:

-- ASCII pattern matching with char column
CREATE TABLE t (col1 char(30))
INSERT INTO t VALUES ('Robert King')
SELECT *
FROM t
WHERE col1 LIKE '% King' -- returns 1 row

-- Unicode pattern matching with nchar column
CREATE TABLE t (col1 nchar(30))
INSERT INTO t VALUES ('Robert King')
SELECT *
FROM t
WHERE col1 LIKE '% King' -- no rows returned

-- Unicode pattern matching with nchar column and RTRIM
CREATE TABLE t (col1 nchar (30))
INSERT INTO t VALUES ('Robert King')
SELECT *
FROM t
WHERE RTRIM(col1) LIKE '% King' -- returns 1 row

Anmerkung Beim Durchführen von Zeichenfolgenvergleichen mit LIKE werden alle Zeichen der Musterzeichenfolge berücksichtigt, einschließlich führender und nachfolgender Leerzeichen.

Verwenden des %-Platzhalterzeichens
Wird bei LIKE beispielsweise 5% angegeben, sucht SQL Server nach der Zahl 5, gefolgt von einer beliebigen Zeichenfolge mit null oder mehr Zeichen.

In der folgenden Abfrage werden z. B. alle Systemtabellen einer Datenbank angezeigt, da alle Namen dieser Tabellen mit den Buchstaben sys beginnen:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'sys%'
Würde vermuten, dass Dein #0400-Zeichen garnicht berücksichtigt wird, da es nach dem Joker kommt.
Treffer?
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: MS-SQL-Server und ungewöhnliches Verhalten bei Like-Abfr

  Alt 24. Mär 2004, 08:26
Hi Leuselator

der Test muß mit folgenden Daten durchgeführt werden (#$0400 zeigt kein besonderes Verhalten - mein Fehler):

In der Tabelle mytable in der Spalte myCol (nvarchar) ist der Wert '010101È'. (E + #$0300)

Ich frage die Datenbank mit folgender Query ab:

exec sp_executesql N'select * from mat where (m_matnr like @P1 )', N'@P1 nvarchar(50)', N'0101%̀' (̀ = #$0300).

Dann tritt der Fehler auf. Es sind scheinbar nur bestimmte Zeichen (z.B diese kombinierten Zeichen) von diesem "besonderen" Verhalten der Like-Abfrage betroffen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: MS-SQL-Server und ungewöhnliches Verhalten bei Like-Abfr

  Alt 30. Mär 2004, 21:47
Problem konnte gelößt werden. Ist so vom MS-SQL-Server vorgesehen und kann unter PRB: Windows Collations Ignore Single Quote and Hyphen When Ordering nachgelesen werden
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz