Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Förhandsversion av Microsoft Fabric
Avgör om en specifik teckensträng matchar ett angivet mönster. Ett mönster kan innehålla vanliga tecken och jokertecken. Under mönstermatchning måste vanliga tecken exakt matcha de tecken som anges i teckensträngen. Jokertecken kan dock matchas med godtyckliga fragment av teckensträngen. Om du använder jokertecken blir operatorn LIKE mer flexibel än att använda operatorerna = och != strängjämförelseoperatorerna. Om något av argumenten inte är av teckensträngsdatatyp konverterar SQL Server Database Engine den till teckensträngsdatatyp, om det är möjligt.
              
              
              Transact-SQL syntaxkonventioner
Syntax
Syntax för SQL Server och Azure SQL Database:
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
Syntax för Azure Synapse Analytics och Parallel Data Warehouse:
match_expression [ NOT ] LIKE pattern
              ESCAPE och STRING_ESCAPE stöds inte i Azure Synapse Analytics eller Analytics Platform System (PDW).
Arguments
match_expression
Ett giltigt uttryck för teckendatatyp.
pattern
Den specifika strängen med tecken som ska sökas efter i match_expression och kan innehålla giltiga jokertecken i följande tabell. mönster kan vara högst 8 000 byte.
Om match_expression är en högre prioritetsdatatyp än mönster, och mönsterlängden är större än match_expression, får du ett trunkeringsfel under den implicita konverteringen av mönstervärdet till match_expression typ.
| Wildcard character | Description | Example | 
|---|---|---|
| % | Valfri sträng med noll eller fler tecken. | WHERE title LIKE '%computer%'hittar alla boktitlar med ordetcomputervar som helst i bokens titel. | 
| _(understreck) | Alla enskilda tecken. | WHERE au_fname LIKE '_ean'hittar alla förnamn med fyra bokstäver som slutar medean(Dean,Seanoch så vidare). | 
| [ ] | Ett enskilt tecken inom det angivna intervallet [a-f]eller uppsättningen[abcdef]. | WHERE au_lname LIKE '[C-P]arsen'hittar författarens efternamn som slutar medarsenoch börjar med ett enskilt tecken mellanCochP, till exempelCarsen,Larsen,Karsenoch så vidare. I intervallsökningar kan tecknen som ingår i intervallet variera beroende på sorteringsreglerna för sorteringen. | 
| [^] | Ett enskilt tecken som inte ligger inom det angivna intervallet [^a-f]eller uppsättningen[^abcdef]. | WHERE au_lname LIKE 'de[^l]%'hittar alla författar efternamn som börjar meddeoch där följande bokstav intelär . | 
escape_character
Ett tecken framför ett jokertecken som anger att jokertecknet tolkas som ett vanligt tecken och inte som ett jokertecken. escape_character är ett teckenuttryck som inte har något standarduttryck och som bara måste utvärderas till ett tecken.
Result type
Boolean
Result value
              LIKE returnerar TRUE om match_expression matchar det angivna mönstret.
Remarks
När du gör strängjämförelser med hjälp LIKEav är alla tecken i mönstersträngen betydande. Viktiga tecken omfattar alla inledande eller avslutande blanksteg. Om en jämförelse i en fråga är att returnera alla rader med en sträng LIKE 'abc ' (abc följt av ett enda blanksteg) returneras inte en rad där värdet för kolumnen är abc (abc utan blanksteg). Efterföljande blanksteg, i uttrycket som mönstret matchas till, ignoreras dock. Om en jämförelse i en fråga är att returnera alla rader med strängen LIKE 'abc' (abc utan blanksteg) returneras alla rader som börjar med abc och har noll eller fler avslutande blanksteg.
En strängjämförelse med ett mönster som innehåller tecken - och varchardata kanske inte klarar en LIKE jämförelse på grund av hur data lagras för varje datatyp. I följande exempel skickas en lokal teckenvariabel till en lagrad procedur och använder sedan mönstermatchning för att hitta alla anställda vars efternamn börjar med den angivna uppsättningen tecken.
-- 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
I proceduren FindEmployee returneras inga rader eftersom teckenvariabeln (@EmpLName) innehåller avslutande blanksteg när namnet innehåller färre än 20 tecken. 
              LastName Eftersom kolumnen är varchar finns det inga avslutande blanksteg. Den här proceduren misslyckas eftersom de avslutande blankstegen är betydande.
Följande exempel lyckas dock eftersom avslutande blanksteg inte läggs till i en varchar-variabel .
-- 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
Här är resultatet.
FirstName      LastName            City
----------     -------------------- ---------------
Angela         Barbariol            Snohomish
David          Barber               Snohomish
(2 row(s) affected)
Mönstermatchning med LIKE
              LIKE stöder ASCII-mönstermatchning och Unicode-mönstermatchning. När alla argument (match_expression, mönster och escape_character, om de finns) är ASCII-teckendatatyper utförs ASCII-mönstermatchning. Om något av argumenten är av Unicode-datatyp konverteras alla argument till Unicode och Unicode-mönstermatchning utförs. När du använder Unicode-data (nchar - eller nvarchar-datatyper ) med LIKEär avslutande tomma värden betydande, men för icke-Unicode-data är avslutande tomma värden inte signifikanta. Unicode LIKE är kompatibelt med ISO-standarden. ASCII LIKE är kompatibelt med tidigare versioner av SQL Server.
Följande serie med exempel visar skillnaderna i rader som returneras mellan ASCII- och Unicode-mönstermatchning 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 jämförelser påverkas av sortering. Mer information finns i COLLATE (Transact-SQL).
              % Använd jokertecknet
Om symbolen LIKE '5%' anges söker databasmotorn efter talet 5 följt av en sträng med noll eller fler tecken.
Följande fråga visar till exempel alla dynamiska hanteringsvyer i AdventureWorks2022 databasen, eftersom alla börjar med bokstäverna dm.
-- Uses AdventureWorks
  
SELECT Name
FROM sys.system_views
WHERE Name LIKE 'dm%';
GO
Om du vill se alla objekt som inte är dynamiska hanteringsvyer använder du NOT LIKE 'dm%'. Om du har totalt 32 objekt och LIKE hittar 13 namn som matchar mönstret hittar NOT LIKE du de 19 objekt som inte matchar LIKE mönstret.
Du kanske inte alltid hittar samma namn med ett mönster som LIKE '[^d][^m]%'. I stället för 19 namn kanske du bara hittar 14, med alla namn som börjar med d eller som m den andra bokstaven elimineras från resultaten och namnen på den dynamiska hanteringsvyn. Det här beteendet beror på att matchningssträngar med negativa jokertecken utvärderas i steg, ett jokertecken i taget. Om matchningen misslyckas någon gång i utvärderingen elimineras den.
Använda jokertecken som literaler
Du kan använda jokerteckenmönstret som matchar tecken som literaltecken. Om du vill använda ett jokertecken som ett literaltecken omger du jokertecknet inom hakparenteser. I följande tabell visas flera exempel på hur du använder nyckelordet LIKE[ ] och jokertecken.
| Symbol | Meaning | 
|---|---|
| LIKE '5[%]' | 5% | 
| LIKE '[_]n' | _n | 
| LIKE '[a-cdf]' | a,b,c,dellerf | 
| LIKE '[-acdf]' | -,a,c,dellerf | 
| LIKE '[ [ ]' | [ | 
| LIKE ']' | ] | 
| LIKE 'abc[_]d%' | abc_dochabc_de | 
| LIKE 'abc[def]' | abcd,abceochabcf | 
Mönstermatchning med ESCAPE-satsen
Du kan söka efter teckensträngar som innehåller ett eller flera av de särskilda jokerteckentecken. Till exempel kan tabellen rabatter i en kunddatabas lagra rabattvärden som innehåller ett procenttecken (%). Om du vill söka efter procenttecknet som ett tecken i stället för som ett jokertecken måste ESCAPE-nyckelordet och escape-tecknet anges. En exempeldatabas innehåller till exempel en kolumn med namnet comment som innehåller texten 30%. Om du vill söka efter rader som innehåller strängen 30% någonstans i kommentarskolumnen anger du en WHERE-sats som WHERE comment LIKE '%30!%%' ESCAPE '!'. Om ESCAPE och escape-tecknet inte har angetts returnerar databasmotorn alla rader med strängen 30!.
Om det inte finns något tecken efter ett escape-tecken i LIKE-mönstret är mönstret inte giltigt och LIKE returnerar FALSE. Om tecknet efter ett escape-tecken inte är ett jokertecken ignoreras escape-tecknet och följande tecken behandlas som ett vanligt tecken i mönstret. Dessa tecken inkluderar procenttecknet (%), understreck (_) och vänster hakparentes ([) jokertecken när de omges av dubbla hakparenteser ([ ]). Escape-tecken kan användas inom de dubbla hakparenteserna ([ ]), inklusive för att undvika en caret (^), bindestreck (-) eller höger hakparentes (]).
              0x0000 (char(0)) är ett odefinierat tecken i Windows-sortering och kan inte ingå i LIKE.
Examples
A. Använd LIKE med % jokertecknet
I följande exempel hittar du alla telefonnummer som har riktnummer 415 i PersonPhone tabellen.
-- 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
Här är resultatet.
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. Använd NOT LIKE med % jokertecknet
I följande exempel hittas alla telefonnummer i PersonPhone tabellen som har andra riktnummer än 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
Här är resultatet.
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. Använda ESCAPE-satsen
I följande exempel används ESCAPE -satsen och escape-tecknet för att hitta den exakta teckensträngen 10-15% i kolumnen c1 i mytbl2 tabellen.
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. 
              [ ] Använd jokertecken
I följande exempel hittar du anställda i Person tabellen med förnamnet Cheryl eller Sheryl.
-- Uses AdventureWorks
SELECT BusinessEntityID,
    FirstName,
    LastName
FROM Person.Person
WHERE FirstName LIKE '[CS]heryl';
GO
I följande exempel hittar du raderna för anställda i Person tabellen med efternamnen Zheng eller Zhang.
-- Uses AdventureWorks
  
SELECT LastName,
    FirstName
FROM Person.Person
WHERE LastName LIKE 'Zh[ae]ng'
ORDER BY LastName ASC,
    FirstName ASC;
GO
Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Använd LIKE med % jokertecknet
I följande exempel hittas alla anställda i DimEmployee tabellen med telefonnummer som börjar med 612.
-- Uses AdventureWorks
  
SELECT FirstName,
    LastName,
    Phone
FROM DimEmployee
WHERE phone LIKE '612%'
ORDER BY LastName;
F. Använd NOT LIKE med % jokertecknet
I följande exempel hittar du alla telefonnummer i DimEmployee tabellen som inte börjar med 612.
-- Uses AdventureWorks
  
SELECT FirstName,
    LastName,
    Phone
FROM DimEmployee
WHERE phone NOT LIKE '612%'
ORDER BY LastName;
G. Använd LIKE med _ jokertecknet
I följande exempel hittar du alla telefonnummer som har en riktnummer som börjar med 6 och slutar i 2 tabellen DimEmployee . Det % jokertecknet ingår i slutet av sökmönstret för att matcha alla följande tecken i telefonkolumnvärdet.
-- Uses AdventureWorks
  
SELECT FirstName,
    LastName,
    Phone
FROM DimEmployee
WHERE phone LIKE '6_2%'
ORDER BY LastName;