Aracılığıyla paylaş


(Transact-SQL)

Belirli bir karakter dizesinin belirtilen desenle eşleşip eşleşmediğini belirler.Desen, normal karakterleri veya joker karakterleri içerebilir.Desen eşleştirme sırasında, normal karakterlerin karakter dizesinde belirtilen karakterlerle tam olarak eşleşmesi gerekir.Ancak joker karakterler, karakter dizesinin isteğe bağlı parçalarıyla eşleşebilir.Joker karakterleri kullanmak, BENZER işlecini = ve != dize karşılaştırma işleçlerini kullanmaya göre daha esnek yapar.Bağımsız değişkenlerden herhangi biri, karakter değilse dize veri türü, SQL Server Database Engine karaktere dönüştürür dize mümkünse veri türü.

Topic link iconTransact-SQL sözdizimi kuralları

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

Bağımsız değişkenler

  • match_expression
    Herhangi bir geçerli mi ifade karakter veri türü.

  • pattern
    Is the specific string of characters to search for in match_expression, and can include the following valid wildcard characters.pattern can be a maximum of 8,000 bytes.

    Joker karakter

    Açıklama

    Örnek

    %

    Sıfır veya daha fazla karakterli herhangi bir dize.

    WHERE LIKE 'bilgisayar %' başlık 'computer' sözcüğü tüm kitap başlıklarını rehberi başlığında herhangi bir yeri bulur.

    _ (altçizgi)

    Herhangi bir tek karakter.

    '_Ean' tüm dört harflik adlarını bulur LIKE WHERE au_fname (Deniz, Kemal vb.) ile ean sona erdirmek.

    [ ]

    Herhangi bir tek karakter belirtilen aralıktaki ([a-f]) veya küme ([abcdef]).

    '[C-P] arsen' LIKE au_lname bulur WHERE yazarı son arsen ile biten ve P, örneğin Carsen Larsen, Karsen ve benzeri ile C arasındaki herhangi bir tek karakteri ile başlayan adları.Aralık aramalarda aralığa dahil karakterleri harmanlama sıralama kurallarına bağlı olarak değişebilir.

    [^]

    Herhangi bir tek karakter belirtilen aralıkta değil ([^ a-f]) veya küme ([^ abcdef]).

    LIKE WHERE au_lname ' de [^ l] % ' tüm soyadlarını de ve aşağıdaki harf l değil itibaren yazar.

  • escape_character
    Is a character that is put in front of a wildcard character to indicate that the wildcard should be interpreted as a regular character and not as a wildcard.escape_character is a character expression that has no default and must evaluate to only one character.

Sonuç türleri

Boolean

Sonuç değeri

LIKE TRUE verir match_expression Belirtilen eşleşir. pattern.

Remarks

Tüm karakterler Desen dizesindeki önemli LIKE, dize karşılaştırmaları kullanarak atmış olursunuz.Bu, başında veya sonunda boşluk içerir.Sorgudaki bir karşılaştırma dize LIKE 'abc' (tek bir boşluk ve ardından abc) içeren tüm satırları geri dönmek için sütunun değeri abc (bir boşluk bırakmazsanız abc) olduğu satır döndürülür.Ancak, hangi desenin eşleşiyor, deyimde sonunda boşluklar göz ardı edilir.Sorgudaki bir karşılaştırma LIKE 'abc' (bir boşluk bırakmazsanız abc) dize içeren tüm satırları geri dönmek için abc ile başlatın ve sıfır veya daha çok sonunda boşluklar olan tüm satır döndürülür.

Bir deseni içeren kullanarak BIR dize karşılaştırması char ve varchar veri lıke verilerin nasıl depolanacağını nedeniyle iletebilir değil. Her bir veri depolama anlamalısınız türü ve lıke başarısız olabilir.Aşağıdaki örnek yerel geçirir. char değişken bir saklı yordam ve tüm çalışanları, son adları başlangıç belirtilen karakter kümesiyle bulmak için eşleşen kullandığı deseni.

USE AdventureWorks;
GO
CREATE PROCEDURE FindEmployee @EmpLName char(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';
SELECT c.FirstName, c.LastName, a.City
FROM Person.Contact c JOIN Person.Address a ON c.ContactID = a.AddressID
WHERE c.LastName LIKE @EmpLName;
GO
EXEC FindEmployee @EmpLName = 'Barb';
GO

Içinde FindEmployee yordam, hiçbir satır döndürülür, çünkü char değişken)@EmpLName) adı en fazla 20 karakter içeren her izleyen boşluklar içeriyor. Çünkü LastName sütun varchar, hiçbir sonunda bir boşluk vardır. Izleyen boşlukları önemli olduğundan, bu yordam başarısız olur.

Aşağıdaki örnek, izleyen boşluklar için eklenmez, çünkü ancak başarılı bir varchar değişken.

USE AdventureWorks;
GO
CREATE PROCEDURE FindEmployee @EmpLName varchar(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';
SELECT c.FirstName, c.LastName, a.City
FROM Person.Contact c JOIN Person.Address a ON c.ContactID = a.AddressID
WHERE c.LastName LIKE @EmpLName;
GO
EXEC FindEmployee @EmpLName = 'Barb';

Here is the result set.

FirstName         LastName              City       
---------- ----------------------------------------
Angela             Barbariol            Snohomish
David              Barber               Snohomish

(2 row(s) affected)

Deseni kullanarak eşleşen LIKE

Destekler, ASCII desen eşleştirme ve Unicode eşleşme deseni.Tüm bağımsız değişkenleri ()match_expression, pattern, ve escape_charactereðer varsa) ASCII karakter veri türleri, ASCII desen eşleştirme işlemi gerçekleştirilir. Herhangi bir bağımsız değişken Unicode veri türlerinin, tüm bağımsız değişkenler için Unicode dönüştürülür ve Unicode desen eşleştirme işlemi gerçekleştirilir.Unicode verileri (kullandığınızdanchar veya nvarchar veri türlerinde) sonunda boşluk LIKE, önemli; ancak, Unicode verileri için izleyen boşluklar önemli değildir. Unicode LIKE ISO standart ile uyumludur.ASCII LIKE önceki sürümleriyle uyumlu SQL Server.

Bir dizi ASCII ve Unicode LIKE desen eşleştirme arasında döndürülen satır farklar gösteren örnekler aşağıda verilmektedir.

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

Not

Karşılaştırması harmanlama etkilenmektedir.Daha fazla bilgi için bkz: (Transact-SQL) HARMANLA.

Genel arama karakteri % kullanma

LIKE % 5 ' ' simge belirtilirse, Database Engine 5 numaralı herhangi bir veya daha çok karakter dizesini tarafından izlenen arar.

Örneğin, aşağıdaki sorgu, tüm dinamik yönetimi görünümlerde gösterir AdventureWorks tüm harfleri ile başlatmak için veritabanı dm.

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

Dinamik yönetimi görünümleri olmayan tüm nesneleri görmek için kullanın. NOT LIKE 'dm%'. 32 Nesnelerin toplam sahip ise bulur, LIKE desen NOT the 19, nesneleri bulur LIKE bir desenle eşleşen 13 adları eşleşmiyor.

Her zaman bir desen ile aynı adları gibi bulamayabilir LIKE '[^d][^m]%'. 19 Adları yerine, yalnızca 14 ' ile başlayan tüm adları bulabilirsiniz. d veya m ikinci bir mektup sonuçlar ve dinamik yönetim görünümü adlarını ortadan kaldırmıştır. Negatif bir joker karakter eşleştirme dizelerle adımlar, bir defada bir joker karakter olarak değerlendirildiği olmasıdır.Değerlendirmeyi herhangi bir noktada eşleştirme başarısız olursa, elemiş.

Joker karakterleri, rakamları kullanma

Hazır bilgi karakterleri, desen eşleştirme joker karakterler kullanabilirsiniz.Bir joker karakter bir hazır bilgi karakteri olarak kullanmak için , joker karakter, köşeli ayraç içine alın.Aşağıdaki tablo LIKE anahtar sözcüğünü ve []) joker karakterleri kullanmanın bazı örnekler gösterir.

Simge

Anlamı

'[%] 5' GİBİ

5%

'[_] N'

_n

'[A-cdf]'

a, b, c, d veya f

LIKE ' [-acdf] '

-, a, c, d veya f

'[' GİBİ

[

BENZER '] '

]

'Abc [_] d % '

abc_d ve abc_de

'Abc [def]'

Abcd ve abce abcf

Desen ile ESCAPE eşleşen yan tümce

Bir veya daha çok özel bir joker karakter içeren karakter dizeleri arama yapabilirsiniz.Örneğin, iskontoları tablosundaMüşteriler veritabanı yüzde işaretiyle (%) içeren bir iskonto değerlerini depolayabilir.Yüzde işareti olarak bir karakter yerine joker karakter olarak aramak için , çıkış karakteri ve ESCAPE anahtar sağlanmalıdır.Örneğin, bir örnek veritabanını adlı bir sütun içerir. Açıklama % 30 metni içeren. Içeren tüm satırları aramak için dize % 30 herhangi bir yere de Açıklama sütun gibi bir WHERE yan tümce belirtin.WHERE comment LIKE '%30!%%' ESCAPE '!'. ESCAPE ve çıkış karakteri değil belirtilirse, Database Engine 30 dize içeren tüm satırları verir.

LIKE desen çıkış karakteri sonra hiçbir karakter yoksa, desen geçerli değil ve BENZERI YANLıŞ değerini verir.Çıkış karakteri sonra karakter, bir joker karakter değildir, çıkış karakteri atılır ve çıkış aşağıdaki karakter deseni normal bir karakter olarak işlenir.Bu yüzde (%) işareti içeren alt çizgiyle (_) ve çift ayraç ([]) içine alınır, bu köşeli ayraç ([]) joker karakter sol.Ayrıca, içinde çift ayraç karakteri ([]), çıkış karakterleri kullanılabilir ve şapka işareti (^), tire (-) ve sağ köşeli parantez (]) öncesinde.

Örnekler

C.% Joker karakterle LIKE kullanma

Aşağıdaki örnekte, alan kodu olan tüm telefon numaraları bulur 415 içinde Contact TABLO.

USE AdventureWorks;
GO
SELECT FirstName, LastName, Phone
FROM Person.Contact
WHERE phone LIKE '415%'
ORDER by LastName;
GO

Here is the result set.

FirstName               LastName              phone
-----------------       ----------------      ------------
Ruben                   Alonso                415-555-0124
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 ile % joker karakteri kullanma

Aşağıdaki örnek, tüm telefon numaralarını bulur Contact alan kodları dışında olan tablo 415.

USE AdventureWorks;
GO
SELECT FirstName, LastName, Phone
FROM Person.Contact
WHERE Phone NOT LIKE '415%' AND FirstName = 'Gail'
ORDER BY LastName;
GO

Here is the result set.

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.ESCAPE yan tümcesinin kullanılması

Aşağıdaki örnek ESCAPE yan tümce ve tam karakter bulmak için çıkış karakteri dize 10-15% sütun c1 ın mytbl2 TABLO.

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');
INSERT mytbl2 VALUES ('Discount is .10-.15 off');
GO
SELECT c1 
FROM mytbl2
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';
GO

d.[]) Joker karakterleri kullanma

Aşağıdaki örnek bulur. Contacts adı ile Cheryl veya Sheryl.

USE AdventureWorks;
GO
SELECT ContactID, FirstName, LastName 
FROM Person.Contact 
WHERE FirstName LIKE '[CS]heryl';
GO

Aşağıdaki örnek satırları bulur. Contacts soyadlarını ile Zheng veya Zhang.

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