Einzelnen Beitrag anzeigen

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