Suche…
Syntax
Platzhalter mit%: SELECT * FROM [Tabelle] WHERE [Spaltenname] Wie '% Value%'
Platzhalter mit _: SELECT * FROM [Tabelle] WHERE [Spaltenname] Wie 'V_n%'
Platzhalter mit [charlist]: SELECT * FROM [Tabelle] WHERE [Spaltenname] Wie 'V [abc] n%'
Bemerkungen
Die LIKE-Bedingung in der WHERE-Klausel wird verwendet, um nach Spaltenwerten zu suchen, die dem angegebenen Muster entsprechen. Muster werden gebildet, indem zwei Platzhalterzeichen verwendet werden
- % (Prozentzeichen) - Wird für die Darstellung von null oder mehr Zeichen verwendet
- _ (Unterstrich) - Wird zur Darstellung eines einzelnen Zeichens verwendet
Übereinstimmung mit offenem Muster
Der an den Anfang oder das Ende (oder beide) einer Zeichenfolge angehängte Platzhalter %
ermöglicht die Übereinstimmung von 0 oder mehr Zeichen vor oder nach dem Ende des Musters.
Bei Verwendung von '%' in der Mitte können 0 oder mehr Zeichen zwischen den beiden Teilen des Musters übereinstimmen.
Wir werden diese Mitarbeiter-Tabelle verwenden:
Ich würde | FName | LName | Telefonnummer | ManagerId | DepartmentId | Gehalt | Anstellungsdatum |
---|---|---|---|---|---|---|---|
1 | John | Johnson | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
2 | Sophie | Amudsen | 2479100211 | 1 | 1 | 400 | 11-01-2010 |
3 | Ronny | Schmied | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Jon | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
5 | Hilde | Knag | 2468021911 | 2 | 1 | 800 | 01-01-2000 |
Die folgenden Anweisungen stimmen für alle Datensätze mit FName überein, die die Zeichenfolge "Ein" aus der Employees Table enthalten.
SELECT * FROM Employees WHERE FName LIKE '%on%';
Ich würde | FName | LName | Telefonnummer | ManagerId | DepartmentId | Gehalt | Anstellungsdatum |
---|---|---|---|---|---|---|---|
3 | R auf ny | Schmied | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | J ein | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Die folgende Anweisung stimmt mit allen Datensätzen überein, deren Telefonnummer mit der Zeichenfolge '246' von Employees beginnt .
SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
Ich würde | FName | LName | Telefonnummer | ManagerId | DepartmentId | Gehalt | Anstellungsdatum |
---|---|---|---|---|---|---|---|
1 | John | Johnson | 246 8101214 | 1 | 1 | 400 | 23-03-2005 |
3 | Ronny | Schmied | 246 2544026 | 2 | 1 | 600 | 06-08-2015 |
5 | Hilde | Knag | 246 8021911 | 2 | 1 | 800 | 01-01-2000 |
Die folgende Anweisung stimmt mit allen Datensätzen überein, deren Telefonnummer mit der Zeichenfolge '11' von Employees endet .
SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
Ich würde | FName | LName | Telefonnummer | ManagerId | DepartmentId | Gehalt | Anstellungsdatum |
---|---|---|---|---|---|---|---|
2 | Sophie | Amudsen | 24791002 11 | 1 | 1 | 400 | 11-01-2010 |
5 | Hilde | Knag | 24680219 11 | 2 | 1 | 800 | 01-01-2000 |
Alle Datensätze, bei denen das dritte Zeichen "Fname" von Angestellten "n" ist.
SELECT * FROM Employees WHERE FName LIKE '__n%';
(Zwei Unterstriche werden vor 'n' verwendet, um die ersten 2 Zeichen zu überspringen.)
Ich würde | FName | LName | Telefonnummer | ManagerId | DepartmentId | Gehalt | Anstellungsdatum |
---|---|---|---|---|---|---|---|
3 | Ronny | Schmied | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Jon | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Einzelzeichenübereinstimmung
Um die Auswahl einer Anweisung für eine strukturierte Abfragesprache (SQL-SELECT) zu erweitern, können Platzhalterzeichen, das Prozentzeichen (%) und der Unterstrich (_) verwendet werden.
Das Zeichen _
(Unterstrich) kann als Platzhalter für ein einzelnes Zeichen in einer Musterübereinstimmung verwendet werden.
Finden Sie alle Mitarbeiter, deren Fname mit 'j' beginnen und mit 'n' enden und in Fname genau 3 Zeichen haben.
SELECT * FROM Employees WHERE FName LIKE 'j_n'
_
(Unterstrich) Zeichen können auch mehrmals als Platzhalter für Muster verwendet werden.
Zum Beispiel würde dieses Muster mit "jon", "jan", "jen" usw. übereinstimmen.
Diese Namen werden nicht "jn", "john", "jordan", "justin", "jason", "julian", "jillian", "joann" angezeigt, da in unserer Abfrage ein Unterstrich verwendet wird, der genau überspringen kann Ein Zeichen, das Ergebnis muss aus 3 Zeichen bestehen.
Dieses Muster würde beispielsweise "LaSt", "LoSt", "HaLt" usw. entsprechen.
SELECT * FROM Employees WHERE FName LIKE '_A_T'
Übereinstimmung nach Bereich oder Satz
Stimmen Sie jedes einzelne Zeichen innerhalb des angegebenen Bereichs ab (zB: [af]
) oder setzen Sie (zB: [abcdef]
)
Dieses Bereichsmuster würde mit "gary" übereinstimmen, aber nicht mit "mary":
SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'
Dieses Set Pattern würde "Mary" entsprechen, aber nicht "Gary":
SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'
Der Bereich oder das Set kann auch negiert werden, indem das ^
-Zeichen vor dem Range oder Set angehängt wird:
Dieses Bereichsmuster würde nicht mit "gary" übereinstimmen, sondern mit "mary":
SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'
Dieses Set Pattern würde nicht mit "Mary" übereinstimmen, sondern mit "Gary":
SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'
JEDER gegen ALLE
Übereinstimmung mit:
Mindestens eine Zeichenfolge muss übereinstimmen. In diesem Beispiel muss der Produkttyp entweder "Elektronik", "Bücher" oder "Video" sein.
SELECT *
FROM purchase_table
WHERE product_type LIKE ANY ('electronics', 'books', 'video');
Passen Sie alle an (muss alle Anforderungen erfüllen).
In diesem Beispiel müssen sowohl 'Großbritannien' als auch 'London' und 'Oststraße' (einschließlich Variationen) übereinstimmen.
SELECT *
FROM customer_table
WHERE full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');
Negative Auswahl:
Verwenden Sie ALL, um alle Elemente auszuschließen.
Dieses Beispiel liefert alle Ergebnisse, bei denen der Produkttyp nicht "Elektronik" und nicht "Bücher" und nicht "Video" ist.
SELECT *
FROM customer_table
WHERE product_type NOT LIKE ALL ('electronics', 'books', 'video');
Suchen Sie nach einer Reihe von Zeichen
Die folgende Anweisung stimmt mit allen Datensätzen überein, die FName haben, die mit einem Buchstaben von A bis F aus der Employees Table beginnen.
SELECT * FROM Employees WHERE FName LIKE '[A-F]%'
ESCAPE-Anweisung in der LIKE-Abfrage
Wenn Sie eine Textsuche als LIKE
-Query implementieren, machen Sie das normalerweise so:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%')
(Abgesehen davon, dass Sie LIKE
nicht zwingend verwenden sollten, wenn Sie die Volltextsuche verwenden können), führt dies zu einem Problem, wenn jemand Text wie "50%" oder "a_b" eingibt.
Also (anstatt zur Volltextsuche zu wechseln), können Sie dieses Problem mit der LIKE
-escape-Anweisung lösen:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE '\'
Das bedeutet, dass \
jetzt als ESCAPE-Zeichen behandelt wird. Das bedeutet, Sie können jetzt jedem Zeichen in der Zeichenfolge, die Sie suchen, ein \
voranstellen, und die Ergebnisse werden korrekt angezeigt, auch wenn der Benutzer ein Sonderzeichen wie %
oder _
eingibt.
z.B
string stringToSearch = "abc_def 50%";
string newString = "";
foreach(char c in stringToSearch)
newString += @"\" + c;
sqlCmd.Parameters.Add("@in_SearchText", newString);
// instead of sqlCmd.Parameters.Add("@in_SearchText", stringToSearch);
Hinweis: Der obige Algorithmus dient nur zu Demonstrationszwecken. Es funktioniert nicht in Fällen, in denen ein Graphem aus mehreren Zeichen besteht (utf-8). zB string stringToSearch = "Les Mise\u0301rables";
Sie müssen dies für jedes Graphem tun, nicht für jedes Zeichen. Sie sollten den obigen Algorithmus nicht verwenden, wenn Sie mit asiatischen / ostasiatischen / südasiatischen Sprachen arbeiten. Oder, wenn Sie möchten, dass korrekter Code beginnt, sollten Sie dies für jeden graphemeCluster tun.
Siehe auch ReverseString, eine C # Interviewfrage
Platzhalterzeichen
Platzhalterzeichen werden mit dem SQL-LIKE-Operator verwendet. SQL-Platzhalter werden zum Suchen nach Daten in einer Tabelle verwendet.
Platzhalter in SQL sind:%, _, [charlist], [^ charlist]
% - Ein Ersatz für null oder mehr Zeichen
Eg: //selects all customers with a City starting with "Lo"
SELECT * FROM Customers
WHERE City LIKE 'Lo%';
//selects all customers with a City containing the pattern "es"
SELECT * FROM Customers
WHERE City LIKE '%es%';
_ - Ein Ersatz für ein einzelnes Zeichen
Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';
[charlist] - Legt fest, welche Zeichen übereinstimmen, und legt die Anzahl der Zeichen fest
Eg://selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[adl]%';
//selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
[^ charlist] - Stimmt nur mit einem Zeichen überein, das NICHT in den Klammern angegeben ist
Eg://selects all customers with a City starting with a character that is not "a", "p", or "l"
SELECT * FROM Customers
WHERE City LIKE '[^apl]%';
or
SELECT * FROM Customers
WHERE City NOT LIKE '[apl]%' and city like '_%';