SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Jak działa operator LIKE w SQLite

W SQLite możesz użyć LIKE w zapytaniach, aby przeprowadzić porównanie dopasowania wzorca.

Na przykład możesz dodać go do swojego WHERE klauzula, aby zwrócić tylko wiersze, które pasują do podanego wzorca.

Jednak dodanie go do WHERE Klauzula nie jest jedynym sposobem, w jaki możesz użyć LIKE operator. Możesz go również użyć do zwrócenia wartości logicznej.

Przykład podstawowy

Oto prosty przykład, który używa LIKE operator w WHERE klauzula.

SELECT * FROM Artist
WHERE Name LIKE 'Black%';

Wynik:

ArtistId    Name               
----------  -------------------
11          Black Label Society
12          Black Sabbath      
169         Black Eyed Peas    

W tym przypadku chciałem zwrócić wszystkich wykonawców, których imię zaczyna się od Czarny .

Znak procentowy to symbol wieloznaczny, który pasuje do zera lub większej liczby dowolnych znaków (łącznie ze spacjami).

Bez symbolu wieloznacznego

Gdybym nie użył znaku wieloznacznego, nie uzyskałbym żadnych wyników.

Oto przykład tego, co mam na myśli:

SELECT * FROM Artist
WHERE Name LIKE 'Black';

Wynik:

 

(To celowo jest puste, ponieważ nie było wyników).

Wiele symboli wieloznacznych

W razie potrzeby możesz użyć więcej niż jednego symbolu wieloznacznego. W tym przykładzie dodaję kolejny z przodu mojego wzoru.

SELECT * FROM Artist
WHERE Name LIKE '%Black%';

Wynik:

ArtistId    Name               
----------  -------------------
11          Black Label Society
12          Black Sabbath      
38          Banda Black Rio    
137         The Black Crowes   
169         Black Eyed Peas    

Powoduje to zwrócenie większej liczby wierszy, ponieważ są dwa wiersze, które mają kolor czarny w ich imieniu, ale nie na początku.

Dziki symbol podkreślenia (_)

Możesz również użyć podkreślenia (_ ) symbol wieloznaczny.

Ten symbol wieloznaczny pasuje dokładnie do jednego znaku (dowolnego znaku).

Rozważ poniższą tabelę o nazwie Koty :

CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh    
4           100%Fluff 
5           100$Fluff 

Tak, niektóre z tych kotów mają dziwne imiona, ale przydadzą się.

Oto przykład użycia symbolu wieloznacznego podkreślenia w zapytaniu dotyczącym tej tabeli.

SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';

Wynik:

CatId       CatName   
----------  ----------
1           Brush     
2           Brash       

Zauważ, że kot o imieniu Broosh nie jest wliczony w cenę.

Aby dołączyć Broosh , musiałbym użyć dwóch znaków podkreślenia:

SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';

Wynik:

CatId       CatName   
----------  ----------
3           Broosh       

Wyklucza to jednak pozostałe dwa koty.

Zawsze mogłem użyć znaku procentowego, aby uwzględnić inne koty.

SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';

Wynik:

CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh      

Pamiętaj jednak, że spowoduje to również zwrócenie nazw zawierających więcej niż dwa znaki między Br i sz .

Klauzula ESCAPE

Czasami Twoje dane mogą w rzeczywistości zawierać symbole wieloznaczne. Innymi słowy, dane zawierają podkreślenia lub znaki procentowe.

Może to stanowić problem, jeśli faktycznie próbujesz dopasować znak podkreślenia lub procentu jako znak dosłowny, a nie jako symbol wieloznaczny.

W mojej tabeli kotów zauważysz, że jeden kot ma w swoim imieniu znak procentu. Inny kot ma prawie dokładnie to samo imię, z tą różnicą, że zamiast procentu jest to znak dolara.

Oto tabela ponownie:

CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh    
4           100%Fluff 
5           100$Fluff 

Gdybym chciał zwrócić tylko te koty, których imiona zaczynają się od 100%F wtedy musiałbym uciec przed % . Jeśli nie ucieknę przed tym, otrzymam niechciane wyniki.

Oto, co się stanie, jeśli uruchomię zapytanie bez ucieczka przed znakiem procentu.

SELECT * FROM Cats
WHERE CatName LIKE '100%F';

Wynik:

CatId       CatName   
----------  ----------
4           100%Fluff 
5           100$Fluff 

W tym przypadku znak procentu również pasował do znaku dolara, ponieważ znak procentu był traktowany jako znak wieloznaczny.

Aby upewnić się, że znak procentu nie jest traktowany jako symbol wieloznaczny, możemy użyć ESCAPE klauzula.

SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';

Wynik:

CatId       CatName   
----------  ----------
4           100%Fluff 

Zwróć wartość logiczną

Możesz użyć LIKE operator, aby zwrócić 0 lub 1 , w zależności od tego, czy jest dopasowanie, czy nie.

Oto przykład.

SELECT 
  CatName,
  CatName LIKE 'Br%' 
FROM Cats;

Wynik:

CatName     CatName LIKE 'Br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

W takim przypadku pierwsze trzy wiersze spełniają kryteria, a ostatnie dwa nie.

Rozróżnianie wielkości liter

Domyślnie SQLite LIKE operator nie rozróżnia wielkości liter dla znaków ASCII. Oznacza to, że będzie pasować do wielkich i małych liter, niezależnie od tego, której wielkości użyjesz we wzorze.

Możesz użyć case_ sensitive_like Instrukcja PRAGMA do wykonywania dopasowań z rozróżnianiem wielkości liter w zakresie ASCII.

Zobacz Jak sprawić, by operator LIKE SQLite uwzględniał wielkość liter, aby zapoznać się z przykładami.

Funkcja Like()

Alternatywnym sposobem na to jest użycie like() funkcjonować.

Ta funkcja robi dokładnie to samo, co LIKE operator, z wyjątkiem tego, że musisz użyć nieco innej składni.

Wszystkie powyższe przykłady można przepisać, używając funkcji like() funkcja w razie potrzeby.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak czytać i aktualizować bazę danych SQLite za pomocą ListView w Androidzie?

  2. SQLiteReadOnlyDatabaseException:próba napisania bazy danych tylko do odczytu (kod 1032)

  3. SQLite onUpgrade() frustracja

  4. Zapisz wyniki zapytania SQLite w pliku tekstowym

  5. Android- setPeriodic for JobScheduler nie działa