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 | +-----------------+-----------------+