like-keyword

___ answer302453 ___

Sie haben Recht. Es gibt keinen Vorteil bei der Verwendung von LIKE, es sei denn, Sie führen einen Wildcard-Abgleich durch. Darüber hinaus kann die Verwendung ohne Platzhalter zur Verwendung eines ineffizienten Abfrageplans führen.

    
___ qstnhdr ___ Like und "=" für übereinstimmende Zeichenfolgen mit SQL Server ___ answer304048 ___

Sunny hat es fast geschafft :)

Führen Sie in QA in einer Standardinstallation von SQL2005

Folgendes aus %Vor%

Also stimmt LIKE nicht mit nachfolgenden Leerzeichen überein, auf der Seite des Abfrageplans funktionieren beide fast gleich, aber der Join '=' ist ein kleines bisschen besser.

Eine weitere Sache, die Sie bei der Verwendung von LIKE beachten sollten, ist, dass Sie Ihre Saite ordnungsgemäß verlassen.

%Vor%

Im Allgemeinen verwenden Leute LIKE nicht für genaues Matching, weil die austretenden Probleme alle Arten von Komplikationen und subtilen Fehlern verursachen, die Menschen vergessen zu entkommen und es gibt eine Welt voller Schmerzen.

Aber ... wenn Sie eine wirklich exakte Übereinstimmung suchen, die effizient ist, kann LIKE das Problem lösen.

Sagen Sie, Sie möchten den Benutzernamen mit "sam" vergleichen und nicht "Sam" oder "Sam" erhalten, und unglücklicherweise wird bei der Sortierung der Spalte nicht zwischen Groß- und Kleinschreibung unterschieden.

Etwas wie das Folgende (mit der Flucht hinzugefügt) ist der Weg zu gehen.

%Vor%

Der Grund für eine doppelte Übereinstimmung besteht darin, einen Tabellenscan zu vermeiden.

Wie auch immer ....

Ich denke das Varbinary Casting Trick ist weniger anfällig für Fehler und leichter zu merken.

    
___ answer302636 ___

Wenn keine Platzhalter verwendet werden, besteht der Unterschied darin, dass "=" eine exakte Übereinstimmung ergibt, aber LIKE eine Zeichenfolge mit nachfolgenden Leerzeichen (von SSBO) abgleicht:

  

Wenn Sie Zeichenfolgenvergleiche ausführen   mit LIKE, alle Charaktere in der   Musterzeichenfolge sind signifikant,   einschließlich führender oder nachstehender Leerzeichen.   Wenn ein Vergleich in einer Abfrage durchgeführt werden soll   gebe alle Zeilen mit einer LIKE-Zeichenfolge zurück   'abc' (abc gefolgt von einem einzelnen   Leerzeichen), eine Zeile, in der der Wert von   Diese Spalte ist abc (abc ohne a   Leerzeichen) wird nicht zurückgegeben. Jedoch,   nachgestellte Leerzeichen, im Ausdruck zu   dem das Muster zugeordnet ist, sind   ignoriert. Wenn ein Vergleich in einer Abfrage ist   um alle Zeilen mit der Zeichenfolge zurückzugeben   LIKE 'abc' (abc ohne Leerzeichen), alles   Zeilen, die mit abc beginnen und null haben   oder mehr abschließende Leerzeichen werden zurückgegeben.

    
___ qstntxt ___

Immer, wenn ich eine gespeicherte Prozedur schreibe, um Daten basierend auf einer String-Variablen (varchar, nvarchar, char) auszuwählen, würde ich etwas wie:

haben %Vor%

Also mit anderen Worten, um die Aufzeichnung zu treffen, hätte ich

%Vor%

Aber manchmal stoße ich auf Code, der LIK E anstelle von =

verwendet %Vor%

Wann würdest du es benutzen? Sollte das nicht nur verwendet werden, wenn Sie einen Wildcard-Abgleich benötigen?

BEARBEITEN

Danke für die Antworten.

Ich denke, dass ich klarstellen muss, dass das, was ich wirklich zu fragen versuchte, war: wenn es eine Situation geben könnte, in der es bevorzugt wurde, anstelle von "=" genaues String-Matching zu verwenden. Von den Antworten konnte ich sagen, dass es keine geben würde. Aus meiner eigenen Erfahrung würde ich selbst in Situationen, in denen ich z. B. den Fall und führende und endende Leerzeichen ignorieren muss, ltrim, rtrim, auf beiden Strings und dann "=" verwenden. Nochmals vielen Dank für Ihre Eingabe.

    
___ answer302441 ___

Mit dem Schlüsselwort LIKE können Sie stattdessen das Feld %code% mit einem bestimmten Muster vergleichen einer festen "Zeichenfolge".

    
___ answer302947 ___

Wenn Sie dies im Code anderer Leute sehen, können sie vielleicht einer Person erlauben, einen String mit einem Muster oder Platzhaltern zu übergeben.

    
___ answer302463 ___

Ja - Sie haben Recht - es sollte nur für den Wildcard-Abgleich verwendet werden. Es sollte sparsam verwendet werden, vor allem bei sehr großen Tabellen auf nicht indizierten Feldern, da es Ihre Suchanfragen verlangsamen kann.

    
___ tag123sqlserver ___ Microsoft SQL Server ist ein relationales Datenbankverwaltungssystem (RDBMS). Verwenden Sie dieses Tag für alle SQL Server-Editionen, einschließlich Compact, Express, Azure, Fast-Track, APS (früher PDW) und Azure SQL DW. Verwenden Sie dieses Tag nicht für andere Arten von DBMS (MySQL, PostgreSQL, Oracle usw.). Verwenden Sie dieses Tag nicht für Probleme bei der Software- und mobilen Entwicklung, es sei denn, es steht in direktem Zusammenhang mit der Datenbank. ___ answer20427828 ___

Ich stieß auf das gleiche Problem. Es dauerte etwa anderthalb Minuten, um eine ähnliche Abfrage mit %code% auszuführen. Wenn ich %code% in %code% änderte, war die Abfrage viel schneller.

  • Versuchen Sie, einen Index für die Spalte zu erstellen, mit der Sie vergleichen. Dies beschleunigte die Abfrage erheblich.
  • Versuchen Sie, %code% auszuführen. In meinem Fall hat dies dazu geführt, dass die Abfrage in ca. 6 Sekunden mit %code% ohne den Index und fast sofort mit dem Index ausgeführt wurde.
___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ answer304050 ___

LIKE steht für Wildcard-Matching, wobei as = (equals) für eine exakte Übereinstimmung steht.

Ich denke auch, dass es für Felder verwendet wurde, die von FULL TEXT CATALOGS für harte Kernstringvergleiche katalogisiert wurden.

    
___ answer302461 ___

Ja, soweit ich weiß, ist die Verwendung von "Like" ohne Platzhalter identisch mit dem Operator "=". Sind Sie sicher, dass der Eingabeparameter keine Platzhalter enthält?

    
___ tag123likeyword ___ hilf uns dieses Wiki zu bearbeiten ___
9
Antworten

Like und "=" für übereinstimmende Zeichenfolgen mit SQL Server

Immer, wenn ich eine gespeicherte Prozedur schreibe, um Daten basierend auf einer String-Variablen (varchar, nvarchar, char) auszuwählen, würde ich etwas wie: haben %Vor% Also mit anderen Worten, um die Aufzeichnung zu treffen, hätte ich %...
19.11.2008, 16:13