Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Určuje, zda určitý znakový řetězec odpovídá zadanému vzoru. Vzor může obsahovat běžné znaky a zástupné znaky. Během porovnávání vzorů musí regulární znaky přesně odpovídat znakům zadaným v řetězci znaků. Zástupné znaky se ale dají spárovat s libovolnými fragmenty řetězce znaků. Použití zástupných znaků zpřístupňuje LIKE operátor flexibilnější než použití = operátorů porovnání řetězců a != řetězců. Pokud některý z argumentů není datový typ řetězce znaků, databázový stroj SQL Serveru ho převede na datový typ řetězce znaků, pokud je to možné.
Syntax
Syntaxe pro SQL Server a Azure SQL Database:
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
Syntaxe pro Azure Synapse Analytics a paralelní datový sklad:
match_expression [ NOT ] LIKE pattern
ESCAPE a STRING_ESCAPE nejsou podporované ve službě Azure Synapse Analytics ani v systému PDW (Analytics Platform System).
Arguments
match_expression
Libovolný platný výraz datového typu znaku.
pattern
Konkrétní řetězec znaků, který se má vyhledat v match_expression, a může obsahovat platné zástupné znaky v následující tabulce. vzor může být maximálně 8 000 bajtů.
Pokud je match_expression datový typ s vyšší prioritou než vzor a délka vzorku je větší než match_expression, při implicitním převodu hodnoty vzoru na typ match_expression se zobrazí chyba zkrácení.
| Divoká karta | Description | Example |
|---|---|---|
% |
Libovolný řetězec s nulovými nebo více znaky. |
WHERE title LIKE '%computer%' najde všechny názvy knih se slovem computer kdekoli v názvu knihy. |
_ (podtržítko) |
Libovolný jeden znak. |
WHERE au_fname LIKE '_ean' najde všechna čtyři písmena křestní jména, která končí písmenem ean (Dean, Seanatd.). |
[ ] |
Libovolný jeden znak v zadaném rozsahu [a-f] nebo sadě [abcdef]. |
WHERE au_lname LIKE '[C-P]arsen' najde příjmení autora končící a začínající libovolným jediným znakem arsen mezi C a P, například Carsen, Larsen, Karsenatd. V hledání v oblasti se znaky zahrnuté v oblasti můžou lišit v závislosti na pravidlech řazení kolace. |
[^] |
Libovolný jeden znak, který není v zadaném rozsahu [^a-f] nebo sadě [^abcdef]. |
WHERE au_lname LIKE 'de[^l]%' najde všechna příjmení autora začínající de a kde následující písmeno není l. |
escape_character
Znak vložený před zástupný znak označující, že zástupný znak je interpretován jako běžný znak, nikoli jako zástupný znak. escape_character je znakový výraz, který nemá výchozí hodnotu a musí se vyhodnotit pouze na jeden znak.
Typ výsledku
Boolean
Hodnota výsledku
LIKE vrátí hodnotu TRUE, pokud match_expression odpovídá zadanému vzoru.
Remarks
Při porovnávánířetězcůch LIKE Mezi významné znaky patří všechny úvodní nebo koncové mezery. Pokud je porovnáním dotazu vráceny všechny řádky s řetězcem LIKE 'abc ' (abc následovaným jedinou mezerou), řádek, ve kterém hodnota tohoto sloupce je abc (abc bez mezery) vrácena. Koncové prázdné hodnoty ve výrazu, ke kterému se vzor shoduje, se ale ignorují. Pokud je porovnáním dotazu vrácení všech řádků s řetězcem LIKE 'abc' (abc bez mezery), vrátí se všechny řádky, které začínají abc a mají nula nebo více koncových prázdných znaků.
Porovnání řetězců pomocí vzoru, který obsahuje data typu char a varchar , nemusí předat LIKE porovnání z důvodu toho, jak jsou data uložena pro každý datový typ. Následující příklad předá uloženou proceduru místní znakovou proměnnou a pak pomocí porovnávání vzorů vyhledá všechny zaměstnance, jejichž příjmení začínají zadanou sadou znaků.
-- Uses AdventureWorks
CREATE PROCEDURE FindEmployee @EmpLName CHAR(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';
SELECT p.FirstName,
p.LastName,
a.City
FROM Person.Person p
INNER JOIN Person.Address a
ON p.BusinessEntityID = a.AddressID
WHERE p.LastName LIKE @EmpLName;
GO
EXEC FindEmployee @EmpLName = 'Barb';
GO
FindEmployee V postupu nejsou vráceny žádné řádky, protože proměnná znaku (@EmpLName) obsahuje koncové hodnoty, kdykoli název obsahuje méně než 20 znaků.
LastName Vzhledem k tomu, že sloupec je varchar, nejsou žádné koncové prázdné hodnoty. Tento postup selže, protože koncové prázdné hodnoty jsou významné.
Následující příklad je však úspěšný, protože koncové prázdné hodnoty nejsou přidány do proměnné varchar .
-- Uses AdventureWorks
CREATE PROCEDURE FindEmployee @EmpLName VARCHAR(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';
SELECT p.FirstName,
p.LastName,
a.City
FROM Person.Person p
INNER JOIN Person.Address a
ON p.BusinessEntityID = a.AddressID
WHERE p.LastName LIKE @EmpLName;
GO
EXEC FindEmployee @EmpLName = 'Barb';
GO
Tady je soubor výsledků.
FirstName LastName City
---------- -------------------- ---------------
Angela Barbariol Snohomish
David Barber Snohomish
(2 row(s) affected)
Porovnávání vzorů pomocí funkce LIKE
LIKE podporuje porovnávání vzorů ASCII a porovnávání vzorů Unicode. Pokud jsou všechny argumenty (match_expression, vzor a escape_character, pokud existují) datové typy znaků ASCII, provede se porovnávání vzorů ASCII. Pokud některý z argumentů je datový typ Unicode, všechny argumenty se převedou na Unicode a provede se porovnávání vzorů Unicode. Při použití dat Unicode (datových typů nchar nebo nvarchar ) s LIKEkoncovými mezerami jsou významné, ale pro data, která nejsou unicode, koncové prázdné hodnoty nejsou významné. Unicode LIKE je kompatibilní se standardem ISO. ASCII LIKE je kompatibilní se staršími verzemi SQL Serveru.
Následující série příkladů ukazuje rozdíly v řádcích vrácených mezi porovnávání vzorů ASCII a Unicode LIKE .
-- ASCII pattern matching with char column
CREATE TABLE t (col1 CHAR(30));
INSERT INTO t
VALUES ('Robert King');
SELECT * FROM t
WHERE col1 LIKE '% King'; -- returns 1 row
-- Unicode pattern matching with nchar column
CREATE TABLE t (col1 NCHAR(30));
INSERT INTO t
VALUES ('Robert King');
SELECT * FROM t
WHERE col1 LIKE '% King'; -- no rows returned
-- Unicode pattern matching with nchar column and RTRIM
CREATE TABLE t (col1 NCHAR(30));
INSERT INTO t
VALUES ('Robert King');
SELECT * FROM t
WHERE RTRIM(col1) LIKE '% King'; -- returns 1 row
Note
LIKE porovnání jsou ovlivněna kolací. Pro další informace viz COLLATE (Transact-SQL).
Použití zástupné % znaky
LIKE '5%' Pokud je zadaný symbol, databázový stroj vyhledá číslo 5 následované libovolným řetězcem nuly nebo více znaků.
Například následující dotaz zobrazí všechna zobrazení dynamické správy v AdventureWorks2025 databázi, protože všechny začínají písmeny dm.
-- Uses AdventureWorks
SELECT Name
FROM sys.system_views
WHERE Name LIKE 'dm%';
GO
Pokud chcete zobrazit všechny objekty, které nejsou zobrazení dynamické správy, použijte NOT LIKE 'dm%'. Pokud máte celkem 32 objektů a LIKE najde 13 názvů, které odpovídají vzoru, najde 19 objektů, NOT LIKE které neodpovídají LIKE vzoru.
Nemusí být vždy nalezeny stejné názvy se vzorem, jako LIKE '[^d][^m]%'je . Místo 19 názvů můžete najít pouze 14, se všemi názvy, které začínají d nebo mají m jako druhé písmeno vyloučené z výsledků, a názvy zobrazení dynamické správy. Toto chování je způsobeno tím, že porovnávání řetězců se zápornými zástupnými znaky se vyhodnocují v krocích a současně jeden zástupný znak. Pokud se shoda v libovolném okamžiku vyhodnocení nezdaří, odstraní se.
Použití zástupných znaků jako literálů
Jako literální znaky můžete použít vzor se zástupnými znaky, které odpovídají zástupným znakům. Chcete-li jako literální znak použít zástupný znak, uzavřete zástupný znak do závorek. Následující tabulka uvádí několik příkladů použití klíčového LIKE slova a zástupných [ ] znaků.
| Symbol | Meaning |
|---|---|
LIKE '5[%]' |
5% |
LIKE '[_]n' |
_n |
LIKE '[a-cdf]' |
a, b, c, dnebo f |
LIKE '[-acdf]' |
-, a, c, dnebo f |
LIKE '[ [ ]' |
[ |
LIKE ']' |
] |
LIKE 'abc[_]d%' |
abc_d a abc_de |
LIKE 'abc[def]' |
abcd, abce a abcf |
Porovnávání vzorů s klauzulí ESCAPE
Můžete vyhledat řetězce znaků, které obsahují jeden nebo více speciálních zástupných znaků. Například tabulka slev v databázi zákazníků může ukládat hodnoty slev, které zahrnují znak procenta (%). Chcete-li hledat znak procenta jako znak místo zástupného znaku, je nutné zadat klíčové slovo ESCAPE a řídicí znak. Například ukázková databáze obsahuje sloupec pojmenovaný komentář, který obsahuje text 30%. Pokud chcete vyhledat všechny řádky obsahující řetězec 30% kdekoli ve sloupci komentáře, zadejte klauzuli WHERE, například WHERE comment LIKE '%30!%%' ESCAPE '!'. Pokud řídicí znak a řídicí znak nejsou zadány, databázový stroj vrátí všechny řádky s řetězcem 30!.
Pokud za řídicím znakem ve vzoru LIKE není žádný znak, vzor není platný a funkce LIKE vrátí hodnotu NEPRAVDA. Pokud znak za řídicím znakem není zástupný znak, řídicí znak se zahodí a následující znak se považuje za běžný znak ve vzoru. Mezi tyto znaky patří znak procenta (%), podtržítko (_) a levá závorka ([) zástupné znaky, pokud jsou uzavřeny v dvojitých závorkách ([ ]). Řídicí znaky lze použít v dvojitých závorkách ([ ]), včetně řídicí stříšky (^), spojovníku (-) nebo pravé hranaté závorky (]).
0x0000 (char(0)) je nedefinovaný znak v kolacích Windows a nelze ho zahrnout do funkce LIKE.
Examples
A. Použití funkce LIKE se zástupným znakem %
Následující příklad najde všechna telefonní čísla, která mají v tabulce 415 směrové číslo PersonPhone oblasti.
-- Uses AdventureWorks
SELECT p.FirstName,
p.LastName,
ph.PhoneNumber
FROM Person.PersonPhone AS ph
INNER JOIN Person.Person AS p
ON ph.BusinessEntityID = p.BusinessEntityID
WHERE ph.PhoneNumber LIKE '415%'
ORDER BY p.LastName;
GO
Tady je soubor výsledků.
FirstName LastName Phone
----------------- ------------------- ------------
Ruben Alonso 415-555-124
Shelby Cook 415-555-0121
Karen Hu 415-555-0114
John Long 415-555-0147
David Long 415-555-0123
Gilbert Ma 415-555-0138
Meredith Moreno 415-555-0131
Alexandra Nelson 415-555-0174
Taylor Patterson 415-555-0170
Gabrielle Russell 415-555-0197
Dalton Simmons 415-555-0115
(11 row(s) affected)
B. Použití funkce NOT LIKE se zástupným znakem %
Následující příklad najde všechna telefonní čísla v PersonPhone tabulce, která mají jiné směrové číslo oblasti než 415.
-- Uses AdventureWorks
SELECT p.FirstName,
p.LastName,
ph.PhoneNumber
FROM Person.PersonPhone AS ph
INNER JOIN Person.Person AS p
ON ph.BusinessEntityID = p.BusinessEntityID
WHERE ph.PhoneNumber NOT LIKE '415%'
AND p.FirstName = 'Gail'
ORDER BY p.LastName;
GO
Tady je soubor výsledků.
FirstName LastName Phone
---------------------- -------------------- -------------------
Gail Alexander 1 (11) 500 555-0120
Gail Butler 1 (11) 500 555-0191
Gail Erickson 834-555-0132
Gail Erickson 849-555-0139
Gail Griffin 450-555-0171
Gail Moore 155-555-0169
Gail Russell 334-555-0170
Gail Westover 305-555-0100
(8 row(s) affected)
C. Použití klauzule ESCAPE
Následující příklad používá klauzuli ESCAPE a řídicí znak k nalezení přesného řetězce 10-15% znaků ve sloupci c1mytbl2 tabulky.
USE tempdb;
GO
IF EXISTS (
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytbl2'
)
DROP TABLE mytbl2;
GO
USE tempdb;
GO
CREATE TABLE mytbl2 (c1 SYSNAME);
GO
INSERT mytbl2
VALUES ('Discount is 10-15% off'),
('Discount is .10-.15 off');
GO
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';
GO
D. Použití zástupných [ ] znaků
Následující příklad najde zaměstnance v Person tabulce s křestní jméno Cheryl nebo Sheryl.
-- Uses AdventureWorks
SELECT BusinessEntityID,
FirstName,
LastName
FROM Person.Person
WHERE FirstName LIKE '[CS]heryl';
GO
Následující příklad najde řádky pro zaměstnance v Person tabulce s příjmením Zheng nebo Zhang.
-- Uses AdventureWorks
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName LIKE 'Zh[ae]ng'
ORDER BY LastName ASC,
FirstName ASC;
GO
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
E. Použití funkce LIKE se zástupným znakem %
Následující příklad najde všechny zaměstnance v DimEmployee tabulce s telefonními čísly, které začínají 612na .
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone LIKE '612%'
ORDER BY LastName;
F. Použití funkce NOT LIKE se zástupným znakem %
Následující příklad najde všechna telefonní čísla v DimEmployee tabulce, které nezačínaly 612.
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone NOT LIKE '612%'
ORDER BY LastName;
G. Použití funkce LIKE se zástupným znakem _
Následující příklad najde všechna telefonní čísla, která mají směrové číslo oblasti začínající 6 na a končící 2 v DimEmployee tabulce. Zástupný znak % je součástí konce vzoru hledání tak, aby odpovídal všem následujícím znakům v hodnotě sloupce telefonu.
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone LIKE '6_2%'
ORDER BY LastName;
Viz také
- PATINDEX (Transact-SQL)
- Výrazy (Transact-SQL)
- Jaké jsou funkce databáze SQL?
- SELECT (Transact-SQL)
- SELECT (Transact-SQL)
- KDE (Transact-SQL)