Megosztás a következőn keresztül:


MINT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Meghatározza, hogy egy adott karaktersztring megfelel-e egy adott mintának. A minta tartalmazhat normál karaktereket és helyettesítő karaktereket. A mintaegyeztetés során a normál karaktereknek pontosan meg kell egyeznie a karaktersztringben megadott karakterekkel. A helyettesítő karakterek azonban megfeleltethetők a karaktersztring tetszőleges töredékeinek. A helyettesítő karakterek használata rugalmasabbá teszi az LIKE operátort, mint a sztring-összehasonlító =!= operátorok használatát. Ha az argumentumok egyike nem karaktersztring adattípusú, az SQL Server adatbázismotorja karaktersztring adattípussá alakítja, ha lehetséges.

Transact-SQL szintaxis konvenciók

Syntax

Az SQL Server és az Azure SQL Database szintaxisa:

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

Az Azure Synapse Analytics és a párhuzamos adattárház szintaxisa:

match_expression [ NOT ] LIKE pattern

ESCAPE és STRING_ESCAPE nem támogatottak az Azure Synapse Analytics vagy az Analytics Platform System (PDW) esetében.

Arguments

match_expression

Bármilyen érvényes karakteradat-kifejezés .

pattern

A match_expression keresendő karakterek adott sztringje, amely érvényes helyettesítő karaktereket tartalmazhat az alábbi táblázatban. a minta legfeljebb 8000 bájt lehet.

Ha match_expression nagyobb elsőbbséget élvez a mintánál, és a minta hossza nagyobb, mint match_expression, csonkítási hibát fog kapni a mintaérték implicit átalakítása során match_expression típusra.

Wildcard karakter Description Example
% Bármely nulla vagy több karakterből álló sztring. WHERE title LIKE '%computer%' megkeresi az összes könyvcímet, ahol a szó computer szerepel a könyv címében.
_ (aláhúzás) Bármely karakter. WHERE au_fname LIKE '_ean'megkeresi az összes négybetűs utónevet, amely (eanstbDean.) végződéssel Sean végződik.
[ ] Bármely karakter a megadott tartományon [a-f] belül vagy beállításban [abcdef]. WHERE au_lname LIKE '[C-P]arsen'megkeresi a szerző vezetéknevét, amely egy karakterrel arsenCPvégződik és kezdődik, például Carsen, LarsenKarsenstb. A tartománykeresésekben a tartományban szereplő karakterek a rendezés rendezési szabályaitól függően változhatnak.
[^] Bármely olyan karakter, amely nem tartozik a megadott tartományba [^a-f] vagy beállításba [^abcdef]. WHERE au_lname LIKE 'de[^l]%' megkeresi az összes szerző vezetéknevét a kezdőbetűvel de kezdődően, és ahol a következő betű nem lszerepel.

escape_character

A helyettesítő karakter elé helyezett karakter azt jelzi, hogy a helyettesítő karaktert nem helyettesítő karakterként, hanem normál karakterként értelmezi a rendszer. escape_character olyan karakterkifejezés, amelynek nincs alapértelmezett értéke, és csak egy karaktert kell kiértékelnie.

Eredmény típusa

Boolean

Eredményérték

LIKE IGAZ értéket ad vissza, ha a match_expression megegyezik a megadott mintával.

Remarks

Ha sztring-összehasonlítást végez a használatával LIKE, a mintasztringben szereplő összes karakter jelentős. A jelentős karakterek közé tartoznak a kezdő vagy záró szóközök. Ha egy lekérdezés összehasonlításának célja, hogy egy sztringgel LIKE 'abc ' (abcmajd egy szóközzel) adja vissza az összes sort, akkor a függvény nem ad vissza egy olyan sort, amelyben az oszlop értéke (abcszóköz nélkül) van abc . A záró üres mezőket azonban figyelmen kívül hagyja a rendszer abban a kifejezésben, amelyhez a minta megfelel. Ha egy lekérdezésben az összehasonlítás a sztringgel LIKE 'abc' (abc szóköz nélkül) rendelkező összes sort adja vissza, a rendszer minden olyan sort visszaad, amely nullával abc vagy több záró ürességgel kezdődik.

Előfordulhat, hogy a karakter- és varcharadatokat tartalmazó mintát használó sztring-összehasonlítás nem felel meg az LIKE összehasonlításnak, mert az adatok tárolása az egyes adattípusokhoz történik. Az alábbi példa egy helyi karakterváltozót ad át egy tárolt eljárásnak, majd mintaegyeztetéssel megkeresi az összes olyan alkalmazottat, akinek a vezetékneve a megadott karakterkészlettel kezdődik.

-- 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 Az eljárás során nem ad vissza sorokat, mert a karakter változó (@EmpLName) záró üres elemeket tartalmaz, ha a név 20 karakternél kevesebb karaktert tartalmaz. Mivel az LastName oszlop varchar, nincsenek záró üresek. Ez az eljárás meghiúsul, mert a záró üres adatok jelentősek.

Az alábbi példa azonban sikeres, mert a záró üres elemek nem lesznek hozzáadva a varchar változóhoz.

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

Itt van az eredmények összessége.

FirstName      LastName            City
----------     -------------------- ---------------
Angela         Barbariol            Snohomish
David          Barber               Snohomish
(2 row(s) affected)

Mintaegyezés a LIKE használatával

LIKE támogatja az ASCII-minták egyeztetését és a Unicode-minták egyeztetését. Ha az összes argumentum (match_expression, minta és escape_character, ha van) ASCII-karakter adattípus, az ASCII-mintaegyezést hajtja végre. Ha az argumentumok bármelyike Unicode-adattípusú, a rendszer minden argumentumot Unicode-ra konvertál, és Unicode-mintaegyezést hajt végre. Ha Unicode-adatokat (nchar vagy nvarchar adattípusokat) LIKEhasznál, a záró üres elemek jelentősek, a nem Unicode-adatok esetében azonban a záró üres elemek nem jelentősek. A Unicode LIKE kompatibilis az ISO-szabványsal. Az ASCII LIKE kompatibilis az SQL Server korábbi verzióival.

Az alábbi példasorozat az ASCII és a Unicode-minta LIKE egyezése között visszaadott sorok közötti különbségeket mutatja be.

-- 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 összehasonlításokra hatással van a rendezés. További információ: COLLATE (Transact-SQL).

% Helyettesítő karakter használata

Ha a LIKE '5%' szimbólum meg van adva, az adatbázismotor megkeresi azt a számot 5 , amelyet bármely nulla vagy több karakterből álló sztring követ.

Az alábbi lekérdezés például az adatbázisban található AdventureWorks2025 összes dinamikus felügyeleti nézetet megjeleníti, mert mindegyik a betűkkel dmkezdődik.

-- Uses AdventureWorks
  
SELECT Name
FROM sys.system_views
WHERE Name LIKE 'dm%';
GO

Ha az összes olyan objektumot meg szeretné tekinteni, amely nem dinamikus felügyeleti nézet, használja a következőt NOT LIKE 'dm%': . Ha összesen 32 objektummal rendelkezik, és LIKE 13 olyan nevet talál, amely megfelel a mintának, megkeresi azt a 19 objektumot, NOT LIKE amelyek nem egyeznek a LIKE mintával.

Előfordulhat, hogy nem mindig ugyanazokat a neveket találja, mint például LIKE '[^d][^m]%'a . 19 név helyett csak 14-et találhat, a második betűvel d kezdődő vagy azokat m tartalmazó neveket, valamint a dinamikus felügyeleti nézetneveket. Ennek a viselkedésnek az az oka, hogy a negatív helyettesítő karaktereket tartalmazó karakterláncok kiértékelése lépésekben történik, egyszerre egy helyettesítő karakterrel. Ha a találat a kiértékelés bármely pontján meghiúsul, a művelet megszűnik.

Helyettesítő karakterek használata literálként

A helyettesítő karaktermintát konstans karakterként használhatja. Ha a helyettesítő karaktert literális karakterként szeretné használni, szögletes zárójelek közé kell foglalnia a helyettesítő karaktert. Az alábbi táblázat több példát mutat be a kulcsszó és a LIKE[ ] helyettesítő karakterek használatára.

Symbol Meaning
LIKE '5[%]' 5%
LIKE '[_]n' _n
LIKE '[a-cdf]' a, b, c, dvagy f
LIKE '[-acdf]' -, a, c, dvagy f
LIKE '[ [ ]' [
LIKE ']' ]
LIKE 'abc[_]d%' abc_d és abc_de
LIKE 'abc[def]' abcd, abceés abcf

A minta egyezik az ESCAPE záradékkal

Kereshet olyan karaktersztringeket, amelyek egy vagy több speciális helyettesítő karaktert tartalmaznak. Egy ügyféladatbázis kedvezménytáblája például százalékjelet (%) tartalmazó kedvezményértékeket tárolhat. Ha helyettesítő karakter helyett karakterként szeretné keresni a százalékjelet, meg kell adni az ESCAPE kulcsszót és a escape karaktert. A mintaadatbázis például egy megjegyzés nevű oszlopot tartalmaz, amely a 30%szöveget tartalmazza. A 30-as sztringet tartalmazó sorok kereséséhez a megjegyzés oszlopában bárhol%, adjon meg egy WHERE záradékot, például WHERE comment LIKE '%30!%%' ESCAPE '!'. Ha az ESCAPE és a feloldó karakter nincs megadva, az adatbázismotor a sztringgel 30!rendelkező sorokat adja vissza.

Ha a LIKE mintában nincs karakter a feloldó karakter után, a minta érvénytelen, és a LIKE hamis értéket ad vissza. Ha a feloldó karakter utáni karakter nem helyettesítő karakter, a rendszer elveti a feloldó karaktert, és a következő karaktert a rendszer normál karakterként kezeli a mintában. Ezek a karakterek közé tartozik a százalékjel (%), az aláhúzásjel (_) és a bal oldali szögletes zárójel ([) helyettesítő karakter, ha két szögletes zárójelbe vannak zárva ([ ]). A feloldó karakterek a kettős zárójelben ([ ]) használhatók, beleértve a simító (^), a kötőjel (-) vagy a jobb szögletes zárójel (]) kimenekülését is.

0x0000 A (char(0)) egy nem definiált karakter a Windows-rendezésekben, és nem szerepelhet a LIKE-ban.

Examples

A. A LIKE használata helyettesítő % karakterrel

Az alábbi példa az összes olyan telefonszámot megkeresi, amely a táblában körzetszámmal 415 rendelkezik PersonPhone .

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

Itt van az eredmények összessége.

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. A NOT LIKE használata helyettesítő % karakterrel

Az alábbi példa az összes olyan telefonszámot megkeresi a PersonPhone táblában, amely a körzetszámtól 415eltérő körzetszámmal rendelkezik.

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

Itt van az eredmények összessége.

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. Az ESCAPE záradék használata

Az alábbi példa a ESCAPE záradékot és a feloldó karaktert használja a pontos karaktersztring 10-15% megkereséséhez a c1 táblázat oszlopábanmytbl2.

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. [ ] Helyettesítő karakterek használata

Az alábbi példa megkeresi a táblában szereplő Person alkalmazottakat, akiknek a vezetékneve Cheryl vagy Sheryla neve.

-- Uses AdventureWorks

SELECT BusinessEntityID,
    FirstName,
    LastName
FROM Person.Person
WHERE FirstName LIKE '[CS]heryl';
GO

Az alábbi példa megkeresi a táblázat azon alkalmazottainak sorait, akiknek vezetéknevét Person vagy Zhengvezetéknevét Zhang tartalmazza.

-- Uses AdventureWorks
  
SELECT LastName,
    FirstName
FROM Person.Person
WHERE LastName LIKE 'Zh[ae]ng'
ORDER BY LastName ASC,
    FirstName ASC;
GO

Példák: Azure Synapse Analytics and Analytics Platform System (PDW)

E. A LIKE használata helyettesítő % karakterrel

Az alábbi példa megkeresi a táblázatban szereplő DimEmployee összes olyan alkalmazottat, aki telefonszámmal 612kezdődik.

-- Uses AdventureWorks
  
SELECT FirstName,
    LastName,
    Phone
FROM DimEmployee
WHERE phone LIKE '612%'
ORDER BY LastName;

F. A NOT LIKE használata helyettesítő % karakterrel

Az alábbi példa megkeresi az összes olyan telefonszámot a DimEmployee táblázatban, amely nem a következővel 612kezdődik:

-- Uses AdventureWorks
  
SELECT FirstName,
    LastName,
    Phone
FROM DimEmployee
WHERE phone NOT LIKE '612%'
ORDER BY LastName;

G. A LIKE használata helyettesítő _ karakterrel

Az alábbi példa megkeresi az összes olyan telefonszámot, amelynek körzetszáma a 6 táblában 2 kezdődik DimEmployee és végződik. A % helyettesítő karakter a keresési minta végén található, így a telefon oszlopértékének összes következő karaktere megegyezik.

-- Uses AdventureWorks
  
SELECT FirstName,
    LastName,
    Phone
FROM DimEmployee
WHERE phone LIKE '6_2%'
ORDER BY LastName;

Lásd még