Frage:
Wie funktioniert der LIKE-Operator?
Antwort:
Der LIKE-Vergleich wird ähnlich wie in VB, allerdings mit anderen Sonderzeichen durchgeführt.
Vom Operator-Vorrang her gleichwertig mit den Vergleichsoperatoren, so dass Ausdrücke wie
„a“ & „b“ Like „_b“ And „b“ & „c“ Like „[a-c]“ & „[bcd]“ auch ohne Klammerung funktionieren. (Verhalten analog zu VB).
Folgende Sonderzeichen(-Kombinationen) werden unterstützt:
Ausdruck | Erklärung |
% | beliebige Zeichenkette (inkl. Leerstring) |
[ac] | a oder c |
[a-c] | a bis c entsprechend der aktuellen Sortierreihenfolge, z.B. „ä“ LIKE „[a-c]“ für die Standart-Sortierreihenfolge |
_ | ein beliebiges Zeichen |
[^a] | alles außer a |
[^a-c] | alles außer a bis c |
[a-zA-Z] | analog |
[^a-zA-Z] | analog |
\ | nächstes Zeichen verliert seine eventuelle Sonderzeichen-Bedeutung, auch innerhalb von [] Extrem-Beispiele: \\–\(einzige Möglichkeit, den Backslash zu kodieren) |
[%_[] | % oder _ oder [ (diese Sonderzeichen zählen in Klammern nicht) |
[a\-b] | a oder -oder b (Backslash hebt Sonderzeichen-Wirkung auf) |
[a^] | a oder ^ (^ gilt nur als Negation, wenn es als erstes Zeichen auftritt) |
] | ] (schließende ohne öffnende Klammer gilt als einzelnes Zeichen) |
Folgende Muster-Typen werden als fehlerhaft deklariert und liefern bei einem Vergleich immer FALSE:
abc\
[abc
[abc\
[a-\
Folgende bei der SQL-Server-Implementation existierende Sonderfälle werden explizit unterstützt:
[^] –^
[a-] –a oder-
Bei folgenden Mustern (nicht Mustertypen!) weicht das Verhalten vom SQL-Server vom Verhalten der Methode ab, da hier das Verhalten vom SQL-Server nicht erklärbar ist:
„-“ LIKE „[ –]“: SQL-Server liefert FALSE
„-“ LIKE „[ -\-]“: SQL-Server liefert FALSE
„-“ LIKE „[\–]“: SQL-Server liefert (korrekt) TRUE
„^“ LIKE „[^^]“:SQL-Server liefert TRUE
„^“ LIKE „[^\^]“:SQL-Server liefert (korrekt) FALSE
„^“ LIKE „[^a^]“:SQL-Server liefert (korrekt) FALSE
Ungültige Unicode-Zeichen (?): Werden beim SQL-Server nicht einmal beim Vergleich mit _ akzeptiert
Die Methode arbeitet für []-Muster noch ziemlich langsam, eine Performance-Verbesserung kann bei Bedarf durchgeführt werden.
Bei der Übersetzung nach SQL werden beide Strings einfach an den SQL-Server durchgereicht. Durch eine ESCAPE-Klausel beim Operator LIKE wird der Backslash als Sonderzeichen definiert.
Beispiel:
Alle GmbHs (alle Adressen mit dem Wort GmbH im Namen)Adressen->Name Like "%GmbH%"
Was this helpful?
1 / 0