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.