Szukaj…


Składnia

  • Symbol wieloznaczny z%: SELECT * FROM [table] WHERE [nazwa_kolumny] Jak „% Value%”

    Symbol wieloznaczny z _: WYBIERZ * Z [tabeli] GDZIE [nazwa_kolumny] Jak „V_n%”

    Symbol wieloznaczny z [charlist]: SELECT * FROM [table] WHERE [nazwa_kolumny] Jak „V [abc] n%”

Uwagi

Warunek LIKE w klauzuli WHERE służy do wyszukiwania wartości kolumn pasujących do podanego wzorca. Wzory są tworzone przy użyciu dwóch następujących symboli wieloznacznych

  • % (Symbol procentu) - Używany do reprezentowania zera lub więcej znaków
  • _ (Podkreślenie) - Używany do reprezentowania pojedynczego znaku

Dopasuj wzór otwarty

% Symbol wieloznaczny dołączony na początku lub na końcu (lub obu) ciągu pozwoli na dopasowanie 0 lub więcej dowolnych znaków przed początkiem lub po końcu wzorca.

Użycie „%” na środku pozwoli dopasować 0 lub więcej znaków między dwiema częściami wzoru.

Wykorzystamy tę tabelę pracowników:

ID FName LName Numer telefonu ManagerId DepartmentId Wynagrodzenie Data wynajmu
1 Jan Johnson 2468101214 1 1 400 23-03-2005
2) Zofia Amudsen 2479100211 1 1 400 11-01-2010
3) Ronny Kowal 2462544026 2) 1 600 06-08-2015
4 Jon Sanchez 2454124602 1 1 400 23-03-2005
5 Hilde Sęk 2468021911 2) 1 800 01-01-2000

Następująca instrukcja pasuje do wszystkich rekordów zawierających FName zawierających ciąg „on” z tabeli pracowników.

SELECT * FROM Employees WHERE FName LIKE '%on%';
ID FName LName Numer telefonu ManagerId DepartmentId Wynagrodzenie Data wynajmu
3) R na ny Kowal 2462544026 2) 1 600 06-08-2015
4 J on Sanchez 2454124602 1 1 400 23-03-2005

Poniższa instrukcja pasuje do wszystkich rekordów o numerze telefonu rozpoczynającym się od ciągu „246” od pracowników.

SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
ID FName LName Numer telefonu ManagerId DepartmentId Wynagrodzenie Data wynajmu
1 Jan Johnson 246 8101214 1 1 400 23-03-2005
3) Ronny Kowal 246 2544026 2) 1 600 06-08-2015
5 Hilde Sęk 246 8021911 2) 1 800 01-01-2000

Poniższa instrukcja pasuje do wszystkich rekordów o numerze telefonu kończącym się ciągiem „11” od pracowników.

SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
ID FName LName Numer telefonu ManagerId DepartmentId Wynagrodzenie Data wynajmu
2) Zofia Amudsen 24791002 11 1 1 400 11-01-2010
5 Hilde Sęk 24680219 11 2) 1 800 01-01-2000

Wszystkie rekordy, w których trzeci znak Fname to „n” od pracowników.

SELECT * FROM Employees WHERE FName LIKE '__n%';

(dwa znaki podkreślenia są używane przed „n”, aby pominąć pierwsze 2 znaki)

ID FName LName Numer telefonu ManagerId DepartmentId Wynagrodzenie Data wynajmu
3) Ronny Kowal 2462544026 2) 1 600 06-08-2015
4 Jon Sanchez 2454124602 1 1 400 23-03-2005

Dopasowanie jednego znaku

Aby poszerzyć wybór instrukcji języka strukturalnego zapytania (SQL-SELECT), można użyć symboli wieloznacznych, znaku procentu (%) i znaku podkreślenia (_).

Znak _ (podkreślenie) może być użyty jako symbol wieloznaczny dla dowolnego pojedynczego znaku w dopasowaniu wzorca.

Znajdź wszystkich pracowników, których Fname zaczyna się na „j”, a kończy na „n” i ma dokładnie 3 znaki w Fname.

SELECT * FROM Employees WHERE FName LIKE 'j_n'

Znak _ (podkreślenie) może być również użyty więcej niż jeden raz jako symbol wieloznaczny w celu dopasowania wzorców.

Na przykład ten wzór pasuje do „jon”, „jan”, „jen” itp.

Nazwy te nie będą wyświetlane „jn”, „jan”, „jordan”, „justin”, „jason”, „julian”, „jillian”, „joann”, ponieważ w naszym zapytaniu używany jest jeden znak podkreślenia i można go pominąć jeden znak, więc wynik musi składać się z 3 znaków Fname.

Na przykład ten wzorzec pasowałby do „LaSt”, „LoSt”, „HaLt” itp.

SELECT * FROM Employees WHERE FName LIKE '_A_T'

Dopasuj według zakresu lub zestawu

Dopasuj dowolny pojedynczy znak z określonego zakresu (np .: [af] ) lub ustaw (np .: [abcdef] ).

Ten wzorzec zasięgu pasowałby do „gary”, ale nie do „mary”:

SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'

Ten wzorzec pasowałby do „mary”, ale nie do „gary”:

SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'

Zasięg lub zestaw można również zanegować, dodając ^ daszek przed zakresem lub zestawem:

Ten wzorzec zasięgu nie pasuje do „gary”, ale pasuje do „mary”:

SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'

Ten wzorzec nie pasuje do „mary”, ale pasuje do „gary”:

SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'

Dopasuj DOWOLNE do WSZYSTKICH

Dopasuj dowolny:
Musi pasować co najmniej jeden ciąg. W tym przykładzie typem produktu musi być „elektronika”, „książki” lub „wideo”.

SELECT *
FROM   purchase_table
WHERE  product_type LIKE ANY ('electronics', 'books', 'video');

Dopasuj wszystko (musi spełniać wszystkie wymagania).
W tym przykładzie muszą być dopasowane zarówno „zjednoczone królestwo”, jak i „londyn” i „droga wschodnia” (w tym warianty).

SELECT *
FROM   customer_table
WHERE  full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');

Wybór negatywny:
Użyj WSZYSTKIE, aby wykluczyć wszystkie elementy.
Ten przykład daje wszystkie wyniki, w których typem produktu nie jest „elektronika”, a nie „książki”, a nie „wideo”.

SELECT *
FROM   customer_table
WHERE  product_type NOT LIKE ALL ('electronics', 'books', 'video');

Wyszukaj zakres znaków

Poniższa instrukcja pasuje do wszystkich rekordów o nazwie FName, które zaczynają się na literę od A do F z tabeli pracowników .

SELECT * FROM Employees WHERE FName LIKE '[A-F]%'

Instrukcja ESCAPE w zapytaniu LIKE

Jeśli zaimplementujesz wyszukiwanie tekstu jako zapytanie typu LIKE , zwykle robisz to w następujący sposób:

SELECT * 
FROM T_Whatever 
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') 

Jednak (poza tym, że nie powinieneś koniecznie używać LIKE gdy możesz korzystać z wyszukiwania pełnotekstowego), to stwarza problem, gdy ktoś wprowadza tekst taki jak „50%” lub „a_b”.

Tak więc (zamiast przejścia na wyszukiwanie pełnotekstowe) możesz rozwiązać ten problem za pomocą instrukcji LIKE -escape:

SELECT * 
FROM T_Whatever 
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE '\'

Oznacza to, że \ będzie teraz traktowane jako znak ESCAPE. Oznacza to, że możesz teraz po prostu wstawić \ do każdego znaku w wyszukiwanym ciągu, a wyniki zaczną być poprawne, nawet gdy użytkownik wprowadzi znak specjalny, taki jak % lub _ .

na przykład

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);

Uwaga: powyższy algorytm służy wyłącznie do celów demonstracyjnych. Nie zadziała w przypadkach, gdy 1 grafem składa się z kilku znaków (utf-8). np. string stringToSearch = "Les Mise\u0301rables"; Musisz to zrobić dla każdego grafemu, a nie dla każdej postaci. Nie powinieneś używać powyższego algorytmu, jeśli masz do czynienia z językami azjatyckimi / wschodnioazjatyckimi / południowoazjatyckimi. A raczej, jeśli chcesz, aby kod zaczynał się poprawnie, powinieneś to zrobić dla każdego klastra graphemeCluster.

Zobacz także ReverseString, wywiad w języku C #

Znaki wieloznaczne

symbole wieloznaczne są używane z operatorem LIKE SQL. Symbole wieloznaczne SQL służą do wyszukiwania danych w tabeli.

Symbole wieloznaczne w SQL to:%, _, [charlist], [^ charlist]

% - Zastępuje zero lub więcej znaków

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

_ - Zastępuje pojedynczy znak

Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';

[lista] - Zestawy i zakresy znaków do dopasowania

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] - Pasuje tylko do znaku NIEokreślonego w nawiasach

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow