sql >> Databáze >  >> RDS >> SQLite

Jak funguje operátor LIKE v SQLite

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.


  1. jak vybrat pouze řádek s maximální sekvencí bez použití poddotazu?

  2. Připojujete se k DB z rozšíření Chrome?

  3. Jak seskupit podle dvou sloupců v SQL

  4. Vrátí přírůstkovou hodnotu sloupce identity na serveru SQL