Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Bepaalt of een specifieke tekenreeks overeenkomt met een opgegeven patroon. Een patroon kan reguliere tekens en jokertekens bevatten. Tijdens het vergelijken van patronen moeten reguliere tekens exact overeenkomen met de tekens die zijn opgegeven in de tekenreeks. Jokertekens kunnen echter worden vergeleken met willekeurige fragmenten van de tekenreeks. Door jokertekens te gebruiken, is de LIKE operator flexibeler dan het gebruik van de = operator en != tekenreeksvergelijkingsoperatoren. Als een van de argumenten niet van het gegevenstype tekenreeks is, converteert de SQL Server Database Engine deze naar het gegevenstype tekenreeks, indien mogelijk.
Transact-SQL syntaxis-conventies
Syntax
Syntaxis voor SQL Server en Azure SQL Database:
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
Syntaxis voor Azure Synapse Analytics en Parallel Data Warehouse:
match_expression [ NOT ] LIKE pattern
ESCAPE en STRING_ESCAPE worden niet ondersteund in Azure Synapse Analytics of Analytics Platform System (PDW).
Arguments
match_expression
Elke geldige expressie van het tekengegevenstype.
pattern
De specifieke tekenreeks waarnaar moet worden gezocht in match_expression en kan geldige jokertekens bevatten in de volgende tabel. patroon kan maximaal 8.000 bytes zijn.
Als match_expression een hogere prioriteit heeft dan het patroon en de patroonlengte groter is dan match_expression, krijgt u een afkappingsfout tijdens de impliciete conversie van patroonwaarde naar match_expression type.
| Wildcard character | Description | Example |
|---|---|---|
% |
Een tekenreeks van nul of meer tekens. |
WHERE title LIKE '%computer%' zoekt alle boektitels met het woord computer ergens in de boektitel. |
_ (onderstrepingsteken) |
Elk willekeurig teken. |
WHERE au_fname LIKE '_ean' zoekt alle voornamen van vier letters die eindigen op ean (Dean, Seanenzovoort). |
[ ] |
Eén teken binnen het opgegeven bereik [a-f] of een set [abcdef]. |
WHERE au_lname LIKE '[C-P]arsen'zoekt naar achternamen van auteurs die eindigen op arsen en beginnen met één teken tussen C enP, bijvoorbeeldLarsenCarsen, Karsenenzovoort. In bereikzoekopdrachten kunnen de tekens in het bereik variëren, afhankelijk van de sorteerregels van de sortering. |
[^] |
Eén teken dat zich niet binnen het opgegeven bereik [^a-f] of de set bevindt [^abcdef]. |
WHERE au_lname LIKE 'de[^l]%' zoekt alle achternamen van de auteur die beginnen met de en waar de volgende letter niet lis. |
escape_character
Een teken vóór een jokerteken om aan te geven dat het jokerteken wordt geïnterpreteerd als een gewoon teken en niet als jokerteken. escape_character is een tekenexpressie die geen standaardwaarde heeft en slechts één teken moet evalueren.
Result type
Boolean
Result value
LIKE retourneert TRUE als de match_expression overeenkomt met het opgegeven patroon.
Remarks
Wanneer u tekenreeksvergelijkingen uitvoert met behulp van LIKE, zijn alle tekens in de patroontekenreeks aanzienlijk. Belangrijke tekens zijn voorloop- of volgspaties. Als een vergelijking in een query alle rijen met een tekenreeks LIKE 'abc ' (abc gevolgd door één spatie) retourneert, wordt er geen rij geretourneerd waarin de waarde van die kolom abc (abc zonder spatie) wordt geretourneerd. Volg lege waarden worden echter genegeerd in de expressie waarop het patroon overeenkomt. Als een vergelijking in een query alle rijen met de tekenreeks (abczonder spatie) retourneert LIKE 'abc' , worden alle rijen met abc nul of meer volgspaties geretourneerd.
Een tekenreeksvergelijking met behulp van een patroon dat teken - en varchar-gegevens bevat, geeft mogelijk geen vergelijking door LIKE vanwege de manier waarop de gegevens voor elk gegevenstype worden opgeslagen. In het volgende voorbeeld wordt een lokale tekenvariabele doorgegeven aan een opgeslagen procedure en wordt vervolgens patroonkoppeling gebruikt om alle werknemers te vinden waarvan de achternaam begint met de opgegeven set tekens.
-- 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
In de FindEmployee procedure worden geen rijen geretourneerd omdat de tekenvariabele (@EmpLName) volgspaties bevat wanneer de naam minder dan 20 tekens bevat. Omdat de LastName kolom varchar is, zijn er geen volgspaties. Deze procedure mislukt omdat de afsluitende lege waarden aanzienlijk zijn.
Het volgende voorbeeld slaagt echter omdat volgspaties niet worden toegevoegd aan een varchar-variabele .
-- 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
Hier is het resultatenoverzicht.
FirstName LastName City
---------- -------------------- ---------------
Angela Barbariol Snohomish
David Barber Snohomish
(2 row(s) affected)
Patroonovereenkomst met LIKE
LIKE ondersteunt ASCII-patroonkoppeling en Unicode-patroonkoppeling. Wanneer alle argumenten (match_expression, patroon en escape_character, indien aanwezig) ASCII-tekengegevenstypen zijn, worden ASCII-patroonkoppelingen uitgevoerd. Als een van de argumenten een Unicode-gegevenstype heeft, worden alle argumenten geconverteerd naar Unicode en worden overeenkomende Unicode-patronen uitgevoerd. Wanneer u Unicode-gegevens (nchar - of nvarchar-gegevenstypen ) gebruikt, LIKEzijn volgbare lege waarden aanzienlijk. Voor niet-Unicode-gegevens zijn volgbare lege waarden echter niet significant. Unicode LIKE is compatibel met de ISO-standaard. ASCII LIKE is compatibel met eerdere versies van SQL Server.
In de volgende reeks voorbeelden ziet u de verschillen in rijen die worden geretourneerd tussen ASCII- en Unicode-patroonkoppeling 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 vergelijkingen worden beïnvloed door sortering. Zie COLLATE (Transact-SQL)voor meer informatie.
% Het jokerteken gebruiken
Als het LIKE '5%' symbool is opgegeven, zoekt de database-engine naar het getal 5 gevolgd door een tekenreeks van nul of meer tekens.
In de volgende query worden bijvoorbeeld alle dynamische beheerweergaven in de AdventureWorks2022 database weergegeven, omdat ze allemaal beginnen met de letters dm.
-- Uses AdventureWorks
SELECT Name
FROM sys.system_views
WHERE Name LIKE 'dm%';
GO
Als u alle objecten wilt zien die geen dynamische beheerweergaven zijn, gebruikt u NOT LIKE 'dm%'. Als u in totaal 32 objecten hebt en LIKE 13 namen vindt die overeenkomen met het patroon, NOT LIKE zoekt u de 19 objecten die niet overeenkomen met het LIKE patroon.
Mogelijk vindt u niet altijd dezelfde namen met een patroon zoals LIKE '[^d][^m]%'. In plaats van 19 namen vindt u mogelijk slechts 14, met alle namen die beginnen met d of hebben m als de tweede letter die uit de resultaten is verwijderd en de namen van de dynamische beheerweergaven. Dit gedrag komt doordat tekenreeksen met negatieve jokertekens worden geëvalueerd in stappen, één jokerteken tegelijk. Als de overeenkomst op enig moment in de evaluatie mislukt, wordt deze geëlimineerd.
Jokertekens gebruiken als letterlijke tekens
U kunt het jokertekenpatroon gebruiken dat overeenkomt met tekens als letterlijke tekens. Als u een jokerteken als een letterlijk teken wilt gebruiken, plaatst u het jokerteken tussen vierkante haken. In de volgende tabel ziet u verschillende voorbeelden van het gebruik van het LIKE trefwoord en de [ ] jokertekens.
| Symbol | Meaning |
|---|---|
LIKE '5[%]' |
5% |
LIKE '[_]n' |
_n |
LIKE '[a-cdf]' |
a, b, c, dof f |
LIKE '[-acdf]' |
-, a, c, dof f |
LIKE '[ [ ]' |
[ |
LIKE ']' |
] |
LIKE 'abc[_]d%' |
abc_d en abc_de |
LIKE 'abc[def]' |
abcd, abce en abcf |
Patroonovereenkomst met de ESCAPE-component
U kunt zoeken naar tekenreeksen met een of meer speciale jokertekens. De kortingentabel in een klantendatabase kan bijvoorbeeld kortingswaarden opslaan die een procentteken (%) bevatten. Als u wilt zoeken naar het procentteken als een teken in plaats van als jokerteken, moet het ESCAPE-trefwoord en het escape-teken worden opgegeven. Een voorbeelddatabase bevat bijvoorbeeld een kolom met de naam opmerking die de tekst 30%bevat. Als u wilt zoeken naar rijen die de tekenreeks 30% ergens in de kolom met opmerkingen, geeft u een WHERE-component op, zoals WHERE comment LIKE '%30!%%' ESCAPE '!'. Als ESCAPE en het escape-teken niet zijn opgegeven, retourneert de database-engine rijen met de tekenreeks 30!.
Als er geen teken is na een escape-teken in het LIKE-patroon, is het patroon niet geldig en retourneert LIKE ONWAAR. Als het teken na een escape-teken geen jokerteken is, wordt het escape-teken verwijderd en wordt het volgende teken behandeld als een normaal teken in het patroon. Deze tekens bevatten het procentteken (%), onderstrepingsteken (_) en jokertekens links ([) wanneer ze tussen dubbele haken ([ ]) staan. Escapetekens kunnen worden gebruikt binnen de dubbele haakjes ([ ]), inclusief om een caret (^), afbreekstreepje (-) of rechterhaak (]) te escapen.
0x0000 (char(0)) is een niet-gedefinieerd teken in Windows-sorteringen en kan niet worden opgenomen in LIKE.
Examples
A. LIKE gebruiken met het % jokerteken
In het volgende voorbeeld vindt u alle telefoonnummers met netnummer 415 in de PersonPhone tabel.
-- 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
Hier is het resultatenoverzicht.
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. NOT LIKE gebruiken met het % jokerteken
In het volgende voorbeeld vindt u alle telefoonnummers in de PersonPhone tabel met andere netnummers dan 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
Hier is het resultatenoverzicht.
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. De ESCAPE-component gebruiken
In het volgende voorbeeld worden de ESCAPE component en het escape-teken gebruikt om de exacte tekenreeks 10-15% in de kolom c1 van de mytbl2 tabel te vinden.
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. De [ ] jokertekens gebruiken
In het volgende voorbeeld vindt u werknemers in de Person tabel met de voornaam of CherylSheryl.
-- Uses AdventureWorks
SELECT BusinessEntityID,
FirstName,
LastName
FROM Person.Person
WHERE FirstName LIKE '[CS]heryl';
GO
In het volgende voorbeeld worden de rijen voor werknemers in de Person tabel met achternamen van Zheng of Zhanggevonden.
-- Uses AdventureWorks
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName LIKE 'Zh[ae]ng'
ORDER BY LastName ASC,
FirstName ASC;
GO
Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)
E. LIKE gebruiken met het % jokerteken
In het volgende voorbeeld vindt u alle werknemers in de DimEmployee tabel met telefoonnummers die beginnen met 612.
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone LIKE '612%'
ORDER BY LastName;
F. NOT LIKE gebruiken met het % jokerteken
In het volgende voorbeeld worden alle telefoonnummers in de DimEmployee tabel gevonden die niet beginnen.612
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone NOT LIKE '612%'
ORDER BY LastName;
G. LIKE gebruiken met het _ jokerteken
In het volgende voorbeeld vindt u alle telefoonnummers met een netnummer dat begint met 6 en eindigt in 2 de DimEmployee tabel. Het % jokerteken wordt aan het einde van het zoekpatroon opgenomen zodat deze overeenkomt met alle volgende tekens in de waarde van de telefoonkolom.
-- Uses AdventureWorks
SELECT FirstName,
LastName,
Phone
FROM DimEmployee
WHERE phone LIKE '6_2%'
ORDER BY LastName;