Es gibt die (fast religiöse) Diskussion, ob Sie LIKE oder '=' verwenden sollten, um Zeichenfolgen in SQL-Anweisungen zu vergleichen.
- Gibt es Gründe, LIKE zu verwenden?
- Gibt es Gründe, '=' zu verwenden?
- Performance? Lesbarkeit?
sql
comparison
Guerda
quelle
quelle
LIKE
und der Gleichheitsoperator hat unterschiedliche Zwecke, sie tun nicht dasselbe:=
ist viel schneller, wohingegenLIKE
Platzhalter interpretiert werden können. Verwenden=
Sie,LIKE
wo immer Sie können und wo immer Sie müssen.Beispielübereinstimmungen:
quelle
Nach meiner kleinen Erfahrung:
"=" für genaue Übereinstimmungen.
"LIKE" für Teilübereinstimmungen.
quelle
Es gibt noch ein paar andere Tricks, die Postgres für den String-Abgleich anbietet (falls dies zufällig Ihre Datenbank ist):
ILIKE, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird:
Streichhölzer:
Und wenn Sie wirklich wütend werden möchten, können Sie reguläre Ausdrücke verwenden:
Streichhölzer:
quelle
Nur als Heads-Up füllt der Operator '=' Zeichenfolgen mit Leerzeichen in Transact-SQL. Also
'abc' = 'abc '
wird wahr zurückkehren;'abc' LIKE 'abc '
wird false zurückgeben. In den meisten Fällen ist '=' korrekt, in einem meiner jüngsten Fälle jedoch nicht.Während '=' schneller ist, könnte LIKE Ihre Absichten expliziter angeben.
http://support.microsoft.com/kb/316626
quelle
Verwenden Sie für den Mustervergleich LIKE. Für genaue Übereinstimmung =.
quelle
LIKE
wird für den Mustervergleich verwendet und=
wird für den Gleichheitstest verwendet (wie durch denCOLLATION
verwendeten definiert).=
kann Indizes verwenden, währendLIKE
Abfragen normalerweise das Testen jedes einzelnen Datensatzes in der Ergebnismenge erfordern, um ihn herauszufiltern (es sei denn, Sie verwenden die Volltextsuche), um=
eine bessere Leistung zu erzielen.quelle
LIKE passt wie Wildcards char [*,?] An der Shell
LIKE '% Suffix' - gib mir alles, was mit Suffix endet. Das konnte man nicht machen mit =
Kommt auf den Fall an.
quelle
Es gibt noch einen weiteren Grund für die Verwendung von "Gefällt mir", auch wenn die Leistung langsamer ist: Zeichenwerte werden beim Vergleich implizit in Ganzzahlen konvertiert.
deklariere @transid varchar (15)
if @transid! = 0
Sie erhalten den Fehler "Die Konvertierung des Varchar-Werts '123456789012345' hat eine int-Spalte übergelaufen".
quelle