sql >> Databáze >  >> RDS >> Mysql

Jak funguje operátor LIKE v MySQL

V MySQL, LIKE operátor provádí porovnávání vzorů pomocí vzoru SQL.

Pokud řetězec odpovídá zadanému vzoru, výsledek je 1 , jinak je to 0 .

Vzor nemusí být nutně doslovný řetězec. Tuto funkci lze použít s řetězcovými výrazy a sloupci tabulky.

Syntaxe

Syntaxe vypadá takto:

expr LIKE pat [ESCAPE 'escape_char']

Kde expr je vstupní řetězec a pat je vzor, ​​proti kterému strunu testujete.

Volitelný ESCAPE klauzule umožňuje zadat znak escape. Výchozí znak escape je \ , takže tuto klauzuli můžete vynechat, pokud ji nepotřebujete měnit.

Příklad 1 – Základní použití

Zde je příklad použití tohoto operátoru v SELECT prohlášení:

SELECT 'Charlie' LIKE 'Char%';

Výsledek:

+------------------------+
| 'Charlie' LIKE 'Char%' |
+------------------------+
|                      1 |
+------------------------+

V tomto případě je návratová hodnota 1 což znamená, že vstupní řetězec odpovídal vzoru. Konkrétně jsme specifikovali, že vstupní řetězec by měl začínat Char a skončit s čímkoli. % znak odpovídá libovolnému počtu znaků (včetně nula znaků).

Zde je to, co se stane, když vypustíme % :

SELECT 'Charlie' LIKE 'Char';

Výsledek:

+-----------------------+
| 'Charlie' LIKE 'Char' |
+-----------------------+
|                     0 |
+-----------------------+

Výsledek je 0 což znamená žádná shoda. Je to proto, že jsme nepoužili zástupný znak k určení jiných znaků.

Příklad 2 – _ Zástupný znak

Máme také možnost použít _ zástupný znak pro určení pouze jednoho znaku. Zde je příklad:

SELECT 'Charlie' LIKE 'Ch_rlie';

Výsledek:

+--------------------------+
| 'Charlie' LIKE 'Ch_rlie' |
+--------------------------+
|                        1 |
+--------------------------+

Dva zástupné znaky lze v případě potřeby kombinovat v rámci vzoru:

SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%' AS 'Result';

Výsledek:

+--------+
| Result |
+--------+
|      1 |
+--------+

Zde jsou některé další:

SELECT 
  'Charlie likes donuts' LIKE 'Ch_rlie%donuts' AS 'Result 1',
  'Charlie likes donuts' LIKE 'Ch_rlie%nuts' AS 'Result 2',
  'Charlie likes donuts' LIKE 'Ch%rlie %likes %' AS 'Result 3',
  'Charlie likes donuts' LIKE '% likes %' AS 'Result 4';

Výsledek:

+----------+----------+----------+----------+
| Result 1 | Result 2 | Result 3 | Result 4 |
+----------+----------+----------+----------+
|        1 |        1 |        1 |        1 |
+----------+----------+----------+----------+

Udělejme v tomto příkladu nějaké změny, abychom viděli příklady, kdy se neshodují:

SELECT 
  'Charlie likes donuts' LIKE 'Ch%rlie_donuts' AS 'Result 1',
  'Charlie likes donuts' LIKE 'Charlie_nuts' AS 'Result 2',
  'Charlie likes donuts' LIKE 'Charlie _likes donuts' AS 'Result 3',
  'Charlie likes donuts' LIKE '_ likes _' AS 'Result 4';

Výsledek:

+----------+----------+----------+----------+
| Result 1 | Result 2 | Result 3 | Result 4 |
+----------+----------+----------+----------+
|        0 |        0 |        0 |        0 |
+----------+----------+----------+----------+

Příklad 3 – Příklad databáze

LIKE Operátor se často používá v rámci WHERE klauzule SELECT při dotazu na databázi. Když se použije tímto způsobem, zúží výsledky pouze na ty záznamy, které se shodují, ale vidíme skutečné výsledky (nejen 1 nebo 0 ).

Zde je příklad toho, jak můžeme tento operátor použít v databázovém dotazu:

SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistName LIKE 'B%';

Výsledek:

+----------+----------------+
| ArtistId | ArtistName     |
+----------+----------------+
|        4 | Buddy Rich     |
|       11 | Black Sabbath  |
|       15 | Birds of Tokyo |
|       16 | Bodyjar        |
+----------+----------------+

V tomto případě se jednalo o jednoduchý dotaz, který vrací všechny umělce, jejichž jména začínají písmenem B .

Zde je úplný seznam umělců v této tabulce:

SELECT ArtistId, ArtistName
FROM Artists;

Výsledek:

+----------+------------------------+
| ArtistId | ArtistName             |
+----------+------------------------+
|        1 | Iron Maiden            |
|        2 | AC/DC                  |
|        3 | Allan Holdsworth       |
|        4 | Buddy Rich             |
|        5 | Devin Townsend         |
|        6 | Jim Reeves             |
|        7 | Tom Jones              |
|        8 | Maroon 5               |
|        9 | The Script             |
|       10 | Lit                    |
|       11 | Black Sabbath          |
|       12 | Michael Learns to Rock |
|       13 | Carabao                |
|       14 | Karnivool              |
|       15 | Birds of Tokyo         |
|       16 | Bodyjar                |
+----------+------------------------+

Příklad 4 – Escape se znakem zpětného lomítka

Co se stane, když je ve vašem vstupním řetězci jeden ze zástupných znaků a potřebujete proti němu provést shodu? Můžete jej ukončit pomocí znaku zpětného lomítka (\ ). Zde je příklad takového vyhledávání s a bez znaku escape:

SELECT 
  'usr_123' LIKE 'usr_123' AS 'Without escape',
  'usr_123' LIKE 'usr\_123' AS 'With escape';

Výsledek:

+----------------+-------------+
| Without escape | With escape |
+----------------+-------------+
|              1 |           1 |
+----------------+-------------+

V tomto případě se oba shodovali, ale z jiných důvodů. První řádek se shodoval, protože zástupný znak určil, že se bude shodovat jakýkoli znak. Druhý řádek také odpovídal, ale pouze proto, že vstupní řetězec měl náhodou podtržítko na správném místě.

Změňme mírně vstupní řetězec, abychom dostali jiný výsledek:

SELECT 
  'usr+123' LIKE 'usr_123' AS 'Without escape',
  'usr+123' LIKE 'usr\_123' AS 'With escape';

Výsledek:

+----------------+-------------+
| Without escape | With escape |
+----------------+-------------+
|              1 |           0 |
+----------------+-------------+

Neescapovaná verze se vrátila kladně, protože zástupný znak znamenal, že na tomto místě můžeme mít jakoukoli postavu. Upravená verze výslovně uváděla, že pouze znak podtržítka (_ ) bude odpovídat. Vstupní řetězec neměl na tomto místě podtržítko, takže výsledek byl záporný.

Příklad 5 – ESCAPE Ustanovení

Můžete také použít ESCAPE klauzule k určení vlastního znaku escape. Zde je příklad:

SELECT 
  'usr_123' LIKE 'usr|_123' ESCAPE '|' AS 'String 1',
  'usr+123' LIKE 'usr|_123' ESCAPE '|' AS 'String 2';

Výsledek:

+----------+----------+
| String 1 | String 2 |
+----------+----------+
|        1 |        0 |
+----------+----------+

Příklad 6 – Číselné výrazy

MySQL implementace LIKE operátor umožňuje použití číselných výrazů. Zde je příklad:

SELECT 
  1234 LIKE '12%',
  1234 LIKE '12_';

Výsledek:

+-----------------+-----------------+
| 1234 LIKE '12%' | 1234 LIKE '12_' |
+-----------------+-----------------+
|               1 |               0 |
+-----------------+-----------------+

  1. Získejte ID řádku tabulky SQLite FTS3

  2. Změňte velikost názvů tabulek/sloupců/indexů v oracle 11g nebo 12c

  3. Jak vypočítat rozdíl mezi dvěma časovými razítky v Oracle

  4. Najděte počet sloupců v tabulce