Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Określa, czy określony ciąg znaków pasuje do określonego wzorca. Wzorzec może zawierać zwykłe znaki i symbole wieloznaczne. Podczas dopasowywania wzorca zwykłe znaki muszą dokładnie odpowiadać znakom określonym w ciągu znaku. Symbole wieloznaczne mogą być jednak dopasowywane do dowolnych fragmentów ciągu znaków. Użycie symboli wieloznacznych sprawia, że operator jest LIKE bardziej elastyczny niż użycie = operatorów porównania ciągów i != . Jeśli którykolwiek z argumentów nie jest typem danych ciągu znaków, aparat bazy danych programu SQL Server konwertuje go na typ danych ciągu znaków, jeśli jest to możliwe.
Transact-SQL konwencje składni
Syntax
Składnia dla programu SQL Server i usługi Azure SQL Database:
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
Składnia dla usług Azure Synapse Analytics i Parallel Data Warehouse:
match_expression [ NOT ] LIKE pattern
ESCAPE i STRING_ESCAPE nie są obsługiwane w usłudze Azure Synapse Analytics lub Analytics Platform System (PDW).
Arguments
match_expression
Dowolne prawidłowe wyrażenie typu danych znaków.
pattern
Określony ciąg znaków do wyszukania w match_expression i może zawierać prawidłowe znaki wieloznaczne w poniższej tabeli. wzorzec może być maksymalnie 8000 bajtów.
Jeśli match_expression jest wyższym typem danych pierwszeństwa niż wzorzec, a długość wzorca jest większa niż match_expression, podczas niejawnej konwersji wartości wzorca na typ match_expression zostanie wyświetlony błąd obcięcia.
| Symbol wieloznaczny | Description | Example |
|---|---|---|
% |
Dowolny ciąg z zero lub więcej znaków. |
WHERE title LIKE '%computer%' znajduje wszystkie tytuły książek ze słowem computer w dowolnym miejscu w tytule książki. |
_ (podkreślenie) |
Dowolny pojedynczy znak. |
WHERE au_fname LIKE '_ean' znajduje wszystkie czteroliterowe nazwy, które kończą się ean na (Dean, Seani tak dalej). |
[ ] |
Dowolny pojedynczy znak w określonym zakresie [a-f] lub ustawić [abcdef]. |
WHERE au_lname LIKE '[C-P]arsen' Znajduje nazwisko autora kończące się ciągiem arsen i zaczyna się od dowolnego pojedynczego znaku między C i P, na przykład Carsen, Larsen, Karseni tak dalej. W wyszukiwaniu zakresów znaki zawarte w zakresie mogą się różnić w zależności od reguł sortowania sortowania. |
[^] |
Każdy pojedynczy znak nie mieści się w określonym zakresie [^a-f] lub ustawić [^abcdef]. |
WHERE au_lname LIKE 'de[^l]%' znajduje wszystkie nazwiska autora rozpoczynające się od de i gdzie następująca litera nie ljest . |
escape_character
Znak umieszczony przed symbolem wieloznacznymi wskazujący, że symbol wieloznaczny jest interpretowany jako zwykły znak, a nie jako symbol wieloznaczny. escape_character jest wyrażeniem znaków, które nie ma wartości domyślnej i musi być obliczane tylko na jeden znak.
Typ wyniku
Boolean
Wartość wynikowa
LIKE Zwraca wartość TRUE, jeśli match_expression pasuje do określonego wzorca.
Remarks
Podczas porównywania ciągów przy użyciu polecenia LIKEwszystkie znaki w ciągu wzorca są znaczące. Znaki znaczące obejmują wszystkie spacje wiodące lub końcowe. Jeśli porównanie w zapytaniu ma zwracać wszystkie wiersze z ciągiem LIKE 'abc ' (abc po którym następuje pojedyncza spacja), wiersz, w którym wartość tej kolumny to abc (abc bez spacji) nie jest zwracana. Jednak końcowe wartości puste w wyrażeniu, do którego jest dopasowany wzorzec, są ignorowane. Jeśli porównanie w zapytaniu ma zwracać wszystkie wiersze z ciągiem LIKE 'abc' (abc bez spacji), zwracane są wszystkie wiersze rozpoczynające się od abc zera lub większej liczby końcowych wartości pustych.
Porównanie ciągów przy użyciu wzorca zawierającego dane char i varchar może nie przekazywać LIKE porównania ze względu na sposób przechowywania danych dla każdego typu danych. Poniższy przykład przekazuje lokalną zmienną char do procedury składowanej, a następnie używa dopasowania wzorca do znajdowania wszystkich pracowników, których nazwiska zaczynają się od określonego zestawu znaków.
-- 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
W procedurze FindEmployee nie są zwracane żadne wiersze, ponieważ zmienna char (@EmpLName) zawiera końcowe wartości puste, gdy nazwa zawiera mniej niż 20 znaków. Ponieważ kolumna LastName jest varchar, nie ma żadnych spacji końcowych. Ta procedura kończy się niepowodzeniem, ponieważ końcowe wartości puste są znaczące.
Jednak poniższy przykład powiedzie się, ponieważ końcowe wartości puste nie są dodawane do zmiennej 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
Oto zestaw wyników.
FirstName LastName City
---------- -------------------- ---------------
Angela Barbariol Snohomish
David Barber Snohomish
(2 row(s) affected)
Dopasowywanie wzorca przy użyciu funkcji LIKE
LIKE Obsługuje dopasowywanie wzorca ASCII i dopasowywanie wzorca Unicode. Gdy wszystkie argumenty (match_expression, wzorzec i escape_character, jeśli istnieją) są typami danych znaków ASCII, jest wykonywane dopasowywanie wzorca ASCII. Jeśli którykolwiek z argumentów ma typ danych Unicode, wszystkie argumenty są konwertowane na Unicode, a dopasowywanie wzorca Unicode jest wykonywane. Jeśli używasz danych Unicode (nchar lub nvarchar danych) z wartością LIKE, końcowe wartości puste są znaczące, jednak w przypadku danych innych niż Unicode końcowe wartości puste nie są istotne. Unicode LIKE jest zgodny ze standardem ISO. ASCII LIKE jest zgodny z wcześniejszymi wersjami programu SQL Server.
W poniższej serii przykładów przedstawiono różnice w wierszach zwracanych między dopasowaniem wzorca ASCII i 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 porównanie ma wpływ na sortowanie. Aby uzyskać więcej informacji, zobacz COLLATE (Transact-SQL).
Używanie symbolu wieloznakowego %
LIKE '5%' Jeśli zostanie określony symbol, aparat bazy danych wyszukuje liczbę5, po której następuje dowolny ciąg zero lub więcej znaków.
Na przykład następujące zapytanie pokazuje wszystkie dynamiczne widoki zarządzania w AdventureWorks2025 bazie danych, ponieważ wszystkie zaczynają się od liter dm.
-- Uses AdventureWorks
SELECT Name
FROM sys.system_views
WHERE Name LIKE 'dm%';
GO
Aby wyświetlić wszystkie obiekty, które nie są dynamicznymi widokami zarządzania, użyj polecenia NOT LIKE 'dm%'. Jeśli masz łącznie 32 obiekty i LIKE znajdziesz 13 nazw pasujących do wzorca, NOT LIKE znajdzie 19 obiektów, które nie pasują do LIKE wzorca.
Nie zawsze można znaleźć te same nazwy ze wzorcem, takim jak LIKE '[^d][^m]%'. Zamiast 19 nazw, można znaleźć tylko 14, ze wszystkimi nazwami rozpoczynającymi się d lub mających m jako drugą literę wyeliminowaną z wyników oraz dynamiczne nazwy widoków zarządzania. To zachowanie jest spowodowane tym, że ciągi zgodne z ujemnymi znakami wieloznacznymi są oceniane w krokach— jeden symbol wieloznaczny naraz. Jeśli dopasowanie zakończy się niepowodzeniem w dowolnym momencie oceny, zostanie wyeliminowane.
Używanie symboli wieloznacznych jako literałów
Można użyć symboli wieloznacznych pasujących znaków jako znaków literału. Aby użyć symbolu wieloznakowego jako znaku literału, należy ująć symbol wieloznaczny w nawiasy kwadratowe. W poniższej tabeli przedstawiono kilka przykładów użycia słowa kluczowego LIKE i symboli [ ] wieloznacznych.
| Symbol | Meaning |
|---|---|
LIKE '5[%]' |
5% |
LIKE '[_]n' |
_n |
LIKE '[a-cdf]' |
a, b, c, dlub f |
LIKE '[-acdf]' |
-, a, c, dlub f |
LIKE '[ [ ]' |
[ |
LIKE ']' |
] |
LIKE 'abc[_]d%' |
abc_d i abc_de |
LIKE 'abc[def]' |
abcd, abce i abcf |
Dopasowanie wzorca z klauzulą ESCAPE
Możesz wyszukać ciągi znaków, które zawierają co najmniej jeden znak wieloznaczny. Na przykład tabela rabatów w bazie danych klientów może przechowywać wartości rabatów, które obejmują znak procentu (%). Aby wyszukać znak procentu jako znak zamiast jako symbol wieloznaczny, należy podać słowo kluczowe ESCAPE i znak ucieczki. Na przykład przykładowa baza danych zawiera kolumnę o nazwie komentarz, która zawiera tekst 30%. Aby wyszukać wszystkie wiersze zawierające ciąg 30% w dowolnym miejscu w kolumnie komentarza, określ klauzulę WHERE, taką jak WHERE comment LIKE '%30!%%' ESCAPE '!'. Jeśli parametr ESCAPE i znak ucieczki nie są określone, aparat bazy danych zwraca jakiekolwiek wiersze z ciągiem 30!.
Jeśli nie ma znaku ucieczki w wzorcu LIKE, wzorzec nie jest prawidłowy, a funkcja LIKE zwraca wartość FALSE. Jeśli znak ucieczki po znaku ucieczki nie jest symbolem wieloznacznymi, znak ucieczki zostanie odrzucony, a następujący znak jest traktowany jako zwykły znak we wzorcu. Te znaki obejmują znak procentu (%), podkreślenie (_) i lewy nawias kwadratowy ([) symbole wieloznaczne, gdy są one ujęte w podwójne nawiasy ([ ]). Znaki ucieczki mogą być używane w znakach podwójnego nawiasu ([ ]), w tym do ucieczki daszka (^), łącznika (-) lub prawego nawiasu (]).
0x0000 (char(0)) jest niezdefiniowanym znakiem sortowania systemu Windows i nie można go uwzględnić w funkcji LIKE.
Examples
A. Użyj symbolu LIKE z symbolem wieloznacznymi %
Poniższy przykład zawiera wszystkie numery telefonów, które mają kod 415 warstwowy w PersonPhone tabeli.
-- 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
Oto zestaw wyników.
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. Użyj symbolu wieloznakowego % NOT LIKE
W poniższym przykładzie znajduje się wszystkie numery telefonów w PersonPhone tabeli zawierające kody obszaru inne niż 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
Oto zestaw wyników.
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. Używanie klauzuli ESCAPE
W poniższym przykładzie użyto klauzuli ESCAPE i znaku ucieczki, aby znaleźć dokładny ciąg 10-15% znaków w kolumnie c1mytbl2 tabeli.
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. Używanie symboli [ ] wieloznacznych
W poniższym przykładzie znajdują pracowników w Person tabeli z nazwiskiem Cheryl lub Sheryl.
-- Uses AdventureWorks
SELECT BusinessEntityID,
FirstName,
LastName
FROM Person.Person
WHERE FirstName LIKE '[CS]heryl';
GO
Poniższy przykład zawiera wiersze dla pracowników w Person tabeli z nazwiskami Zheng lub Zhang.
-- Uses AdventureWorks
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName LIKE 'Zh[ae]ng'
ORDER BY LastName ASC,
FirstName ASC;
GO
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Użyj symbolu LIKE z symbolem wieloznacznymi %
Poniższy przykład znajduje wszystkich pracowników w DimEmployee tabeli z numerami telefonów rozpoczynającymi się od 612.
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone LIKE '612%'
ORDER BY LastName;
F. Użyj symbolu wieloznakowego % NOT LIKE
Poniższy przykład znajduje wszystkie numery telefonów w DimEmployee tabeli, które nie zaczynają się od 612.
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone NOT LIKE '612%'
ORDER BY LastName;
G. Użyj symbolu LIKE z symbolem wieloznacznymi _
W poniższym przykładzie znaleziono wszystkie numery telefonów, które mają kod obszaru rozpoczynający się od 6 i kończący się w 2DimEmployee tabeli. Znak wieloznaczny % znajduje się na końcu wzorca wyszukiwania, aby dopasować wszystkie następujące znaki w wartości kolumny telefonu.
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone LIKE '6_2%'
ORDER BY LastName;