V SQLite můžete použít LIKE
operátor ve vašich dotazech pro provedení porovnání shody vzorů.
Můžete jej například přidat do WHERE
klauzule, aby se vrátily pouze řádky, které odpovídají danému vzoru.
Přidejte jej však do WHERE
klauzule není jediný způsob, jak můžete použít LIKE
operátor. Můžete jej také použít k vrácení booleovské hodnoty.
Základní příklad
Zde je základní příklad, který používá LIKE
operátor v WHERE
doložka.
SELECT * FROM Artist
WHERE Name LIKE 'Black%';
Výsledek:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 169 Black Eyed Peas
V tomto případě jsem chtěl vrátit všechny umělce, jejichž jméno začíná Černým .
Znak procenta je zástupný znak, který odpovídá nule nebo více libovolným znakům (včetně mezer).
Bez zástupného znaku
Kdybych nepoužil zástupný znak, nezískal bych žádné výsledky.
Zde je příklad toho, co mám na mysli:
SELECT * FROM Artist
WHERE Name LIKE 'Black';
Výsledek:
(To je záměrně prázdné, protože nebyly nalezeny žádné výsledky.)
Více zástupných znaků
V případě potřeby můžete použít více než jeden zástupný znak. V tomto příkladu přidám další na přední stranu svého vzoru.
SELECT * FROM Artist
WHERE Name LIKE '%Black%';
Výsledek:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 38 Banda Black Rio 137 The Black Crowes 169 Black Eyed Peas
Výsledkem je vráceno více řádků, protože existují dva řádky, které mají černé na jejich jméno, ale ne na začátku.
Zástupný znak podtržítka (_)
Máte také možnost použít podtržítko (_
) zástupný znak.
Tento zástupný znak odpovídá přesně jednomu znaku (jakémukoli znaku).
Zvažte následující tabulku nazvanou Kočky :
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Ano, některé z těch koček mají divná jména, ale budou se hodit.
Zde je příklad použití zástupného znaku podtržení v dotazu na tuto tabulku.
SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';
Výsledek:
CatId CatName ---------- ---------- 1 Brush 2 Brash
Všimněte si, že kočka jménem Broosh není zahrnuto.
Chcete-li zahrnout Broosh , potřeboval bych použít dvě podtržítka:
SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';
Výsledek:
CatId CatName ---------- ---------- 3 Broosh
To však vylučuje další dvě kočky.
K zahrnutí ostatních koček jsem mohl vždy použít znak procenta.
SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';
Výsledek:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh
Mějte však na paměti, že by to také vrátilo jména s více než dvěma znaky mezi Br a sh .
Klauzule ESCAPE
Někdy mohou vaše data skutečně obsahovat zástupné znaky. Jinými slovy, data obsahují podtržítka nebo procenta.
To může být problém, pokud se ve skutečnosti snažíte porovnat podtržítko nebo znak procenta jako doslovný znak a ne jako zástupný znak.
V mé tabulce koček si všimnete, že jedna kočka má ve svém názvu znak procenta. Další kočka má téměř přesně stejné jméno, až na to, že místo znaku procenta je to znak dolaru.
Zde je opět tabulka:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Pokud bych chtěl vrátit pouze ty kočky, jejichž jména začínají 100%F pak bych potřeboval uniknout z % . Kdybych tomu neunikl, dostal bych nechtěné výsledky.
Zde je to, co se stane, když spustím dotaz bez escapování znaku procenta.
SELECT * FROM Cats
WHERE CatName LIKE '100%F';
Výsledek:
CatId CatName ---------- ---------- 4 100%Fluff 5 100$Fluff
V tomto případě se znak procenta také shodoval se znakem dolaru, protože znak procenta byl považován za zástupný znak.
Abychom zajistili, že znak procenta nebude považován za zástupný znak, můžeme použít ESCAPE
doložka.
SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';
Výsledek:
CatId CatName ---------- ---------- 4 100%Fluff
Vrátí booleovskou hodnotu
Můžete použít LIKE
operátor vrátí 0 nebo 1 , v závislosti na tom, zda existuje shoda nebo ne.
Zde je příklad.
SELECT
CatName,
CatName LIKE 'Br%'
FROM Cats;
Výsledek:
CatName CatName LIKE 'Br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
V tomto případě první tři řádky odpovídají kritériím a poslední dva řádky nikoli.
Rozlišování malých a velkých písmen
Ve výchozím nastavení SQLite LIKE
operátor nerozlišuje velká a malá písmena u znaků ASCII. To znamená, že bude odpovídat velkým a malým písmenům bez ohledu na to, jaká velká a malá písmena ve svém vzoru použijete.
Můžete použít case_sensitive_like Příkaz PRAGMA pro provádění shody rozlišující malá a velká písmena v rozsahu ASCII.
Příklady naleznete v části Jak nastavit rozlišení operátora LIKE na velikost písmen SQLite.
Funkce Like()
Alternativní způsob, jak to udělat, je použít like()
funkce.
Tato funkce dělá přesně to samé jako LIKE
operátor, až na to, že musíte použít trochu jinou syntaxi.
Všechny výše uvedené příklady by mohly být přepsány pomocí like()
funkce v případě potřeby.