LIKE (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. Herhangi bir bağımsız değişken karakter dizesi veri türü, değilse SQL Server Veritabanı AltyapısıMümkünse o karakter dizesi veri türü için dönüştüren.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

Bağımsız değişkenler

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

  • pattern
    Belirli dize içinde aramak için karakter match_expressionve geçerli joker karakterlerini içerebilir. patternen çok 8.000 bayt olabilir.

    Joker karakter

    Açıklama

    Örnek

    %

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

    YERİ 'bilgisayar % gibi' title tüm kitap başlıkları 'bilgisayar' sözcüğü bulur her yerde kitap başlığı.

    _ (alt çizgi)

    Herhangi bir tek karakter.

    where au_fname gibi '_ean' tüm dört harfli ilk isimleri ile ean (Dean, Sean vb.) son bulur.

    [ ]

    Herhangi bir tek karakter belirtilen aralık içinde ([a-f]) veya ([abcdef]) ayarlayın.

    where au_lname '[c-p] arsen' gibi buluntular arsen ile biten ve örneğin Carsen, Larsen, Karsen, c ve p, arasında herhangi bir tek karakterle başlayan soyadları yazar ve benzeri. Aralığı aramalara aralığa dahil karakterleri harmanlamayı sıralama kurallarına bağlı olarak değişebilir.

    [^]

    Herhangi bir tek karakter belirtilen aralık içinde ([^ a-f]) veya ayarlayın ([^ abcdef]).

    where au_lname gibi ' de [^ l] %' tüm soyadlarını de ve aşağıdaki mektup l olmadığı itibaren yazar.

  • escape_character
    Joker karakteri normal karakter olarak ve bir joker olarak yorumlanmalıdır belirtmek için joker karakter önünde koymak bir karakterdir. escape_characterhiçbir varsayılan vardır ve yalnızca bir karakter değerlendirmelidir karakter ifade iş.

Sonuç türleri

Boolean

Sonuç değeri

GİBİ true döndürür match_expressionbelirtilen eşleşen pattern.

Açıklamalar

Tüm karakterlerin desen dizesi önemli gibi ne zaman sen dize karşılaştırmaları kullanarak gerçekleştirin. Bu, başta ve sonda boşluk içerir. Eğer sorguda karşılaştırma 'abc' gibi bir dize içeren tüm satırları döndürmek için (abc ardından tek bir boşlukla), bu sütunun değeri abc (bir boşluk bırakmazsanız abc) olan bir satır döndürülmez. Ancak ifade için desen eşleştirilir, izleyen boşluklar göz ardı edilir. Eğer sorguda karşılaştırma 'abc' gibi dize içeren tüm satırları döndürmek için bir boşluk bırakmazsanız (abc), abc ile başlayan ve sondaki boşlukları sıfır veya daha fazla olan tüm satır döndürülür.

İçeren bir model kullanarak bir dize karşılaştırma charve varcharveri değil geçmek LIKE verileri nasıl depolandığını yüzünden. Her veri depolama anlamalıdır türü ve nerede LIKE başarısız olabilir. Aşağıdaki örnek yerel geçer chardeğişken için bir saklı yordam ve ardından kullandığı desen eşleştirme çalışanları olan son adları start ile belirtilen karakter kümesini bulmak için.

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

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

De FindEmployeeyordamı, hiçbir satır döndürdü çünkü chardeğişken (@EmpLName) adı az 20 karakter içeren her sondaki boşlukları içermektedir. Çünkü LastNamesütun varchar, hiçbir sondaki boşlukları vardır. Sondaki boşlukları önemli bu yordamı başarısız olur.

Ancak, aşağıdaki örnek başarılı, sondaki boşluklar eklenir değil çünkü bir varchardeğişkeni.

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

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

Sonuç kümesi buradadır.

FirstName LastName City

---------- ----------------------------------------

Angela Barbariol Snohomish

David Barber Snohomish

(2 row(s) affected)

Desen eşleştirme kullanarak gibi

Destekler ASCII desen eşleştirme ve Unicode dize kalıbı gibi. Ne zaman tüm değişkenleri (match_expression, pattern, ve escape_character, varsa) ASCII karakter veri türleri, ASCII desen eşleştirme gerçekleştirilir. Herhangi bir bağımsız değişken Unicode veri türü varsa, tüm bağımsız değişkenler için Unicode dönüştürülür ve Unicode dize kalıbı gerçekleştirilir. Unicode verilerini kullandığınızda ( nchar ya nvarcharveri türleri) ile benzeri, sondaki boşlukları önemli; Ancak, Unicode olmayan veri için sondaki boşlukları önemli değildir. Unicode gibi standart ISO ile uyumludur. ASCII gibi önceki sürümleri ile uyumlu SQL Server.

Bir dizi ASCII ve Unicode gibi desen eşleştirme arasında döndürülen satır farklılıkları gösteren örnekler aşağıdadır.

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

-- 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ırma gibi harmanlama tarafından etkilenir. Daha fazla bilgi için, bkz. HARMANLAMA (Transact-sql).

% Joker karakter kullanma

Eğer gibi ' 5 %' sembol belirtilirse, Veritabanı Altyapısı5 numarayı arar takip herhangi bir sıfır veya daha fazla karakter dizesiyle.

Örneğin, aşağıdaki sorgu tüm dinamik yönetimi görünümleri gösterir AdventureWorks2012 veritabanı, çünkü hepsi harfleriyle başlar, dm.

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

USE AdventureWorks2012;
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 NOT LIKE 'dm%'. Eğer sen-si olmak a toplam-in 32 nesneleri bulur gibi değil 19 nesneleri bulur gibi desenle eşleşen 13 LIKE desen adlarıyla.

Siz her zaman aynı adları ile desen gibi bulamayabilir LIKE '[^d][^m]%'. 19 Adları yerine, sen-ebilmek bulmak tüm adları ile başlayan sadece 14 dya da msonuçları ve dinamik yönetimi görünüm adları ortadan ikinci harfi olarak. Bunun nedeni, negatif joker karakter dizeleriyle maç adımda, bir defada bir joker karakter değerlendirilir. Maçın değerlendirmesini herhangi bir noktada başarısız olursa, bunu ortadan kalkar.

Hazır bilgi olarak joker karakterler kullanma

Joker desen eşleştirme karakterleri değişmez karakter olarak kullanabilirsiniz. Joker karakter harf karakter olarak kullanmak için joker karakter parantez içine alın. LIKE anahtar sözcüğünü ve [] joker karakterler kullanarak çeşitli örnekler aşağıdaki tabloda gösterilmektedir.

Simge

Anlamı

'5 GİBİ [%]'

5%

'[_] N gibi'

_n

'[A-cdf gibi]'

a, b, c, d veya f

GİBİ ' [-acdf]'

-, a, c, d veya f

'[' GİBİ

[

GİBİ ']'

]

Abc [_] d LIKE '%'

abc_d ve abc_de

'Abc gibi [def]'

ABCD, abce ve abcf

Desen ESCAPE yan tümcesi ile eşleştirme

Bir veya daha fazla özel joker karakterler içeren karakter dizeleri için arama yapabilirsiniz. Örneğin, discountstablo içinde bir customersveritabanı yüzde işareti (%) içeren iskonto değerleri saklamak. Joker karakter olarak bir karakter yerine yüzde işareti aramak için kaçış kelime ve çıkış karakteri sağlanmalıdır. Örneğin, adlı bir sütun bir sample veritabanı içerir comment% 30 metni içeren. % 30 Yerde dizesini içeren tüm satırları aramak için commentsütun gibi bir where yan tümcesi belirtin, WHERE comment LIKE '%30!%%' ESCAPE '!'. KAÇIŞ ve çıkış karakteri belirtilmezse, Veritabanı Altyapısı30 dize içeren tüm satırları verir.

Yoksa hiçbir karakter sonra çıkış karakteri gibi desene, desen geçerli değil ve benzeri false döndürür. Karakterin arkasına bir kaçış karakterini joker karakter değilse, çıkış karakteri atılır ve aşağıdaki kaçış karakteri şablondaki normal karakter olarak ele alınır. Bu, yüzde işareti (%) içerir, alt çizgi (_) ve çift köşeli ayraç ([]) içine alınır köşeli ayraç ([]) joker karakter bıraktı. Ayrıca, çift köşeli ayraç karakterleri ([]) içinde çıkış karakterleri kullanılabilir çıkıntı işareti (^), kısa çizgi (-) ve sağ köşeli ayraç (]) kaçtı.

0x0000 (char(0)) Windows harmanlamaları tanımsız bir karakterdir ve benzeri içinde eklenemez.

Örnekler

A.% Joker karakterini kullanarak gibi

Aşağıdaki örnek, alan koduna sahip tüm telefon numaralarını bulur 415de PersonPhonetablosu.

USE AdventureWorks2012;
GO
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

USE AdventureWorks2012;
GO
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

Sonuç kümesi buradadır.

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 % joker karakter ile kullanma

Aşağıdaki örnek, tüm telefon numaraları bulur PersonPhoneTablo Alan kodları dışındaki var 415.

USE AdventureWorks2012;
GO
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

USE AdventureWorks2012;
GO
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

Sonuç kümesi buradadır.

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ümcesi kullanarak

Aşağıdaki örnek ESCAPEyan tümcesi ve tam karakter dizesini bulmak için kaçış karakteri 10-15%sütununda c1, mytbl2tablosu.

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

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

Aşağıdaki örnek, çalışanlar üzerinde bulur Persontablo adı ile Cherylya Sheryl.

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

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

Aşağıdaki örnek, çalışanlar için satırları bulur Personsoyadlarını içeren tablo Zhengya Zhang.

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

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

Ayrıca bkz.

Başvuru

Ifadeler (Transact-sql)

Yerleşik İşlevler (Transact-SQL)

select (Transact-sql)

NEREDE (Transact-sql)