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 '_%';


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow