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.Bağımsız değişken herhangi bir karakter dize veri türü olarak ise SQL Server Veritabanı Altyapısı dönüştürür karakter dize veri türü için ise bu mümkün.

Konu bağlantısı simgesiTransact-SQL sözdizimi 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
    İçinde aramak için karakter dize belirli match_expressionve aşağıdaki geçerli joker karakterler.patternen çok 8.000 bayt olabilir.

    Joker karakter

    Açıklama

    Örnek

    %

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

    Burada 'bilgisayar % gibi' title 'bilgisayar' kelimesi tüm kitap başlıklarını bulur herhangi bir kitap başlığı.

    _ (alt çizgi)

    Herhangi bir tek karakter.

    '_Ean' gibi where au_fname tüm dört harfli (Deniz, Kemal vb.) ean ile biten adlarını bulur.

    [ ]

    Tek herhangi bir karakter aralık ([a-f]) veya ([abcdef]) küme .

    where au_lname '[c-p] arsen' gibi bulur, arsen ile biten ve örneğin Carsen, Larsen, Karsen, tek bir karakteri arasında c ve p ile başlayan soyadlarını yazar ve benzeri.aralık aramalarda karakter aralık dahil harmanlamasıralama kurallarına bağlı olarak değişebilir.

    [^]

    Tek bir karakter değil belirtilen aralık içinde ([^ a-f]) veya küme ([^ abcdef]).

    where au_lname gibi ' de [^ m] %' tümü de ve aşağıdaki harf m olmadığı ile başlayan soyadlarını yazar.

  • escape_character
    Joker joker karakter olarak değil, normal karakter olarak yorumlanması gerektiğini belirtmek için joker karakter önüne koymak bir karakterdir.escape_characterhiçbir varsayılan vardır ve yalnızca bir karakter değerlendirmelidir bir karakter ifade iş.

Sonuç türleri

Boolean

Sonuç değeri

GİBİ true verir match_expression belirtilen eşleşen pattern.

Açıklamalar

Tüm karakterler desen dize önemli olduğu gibi dize karşılaştırmaları kullanarak gerçekleştirdiğinizde.Bu, başında veya sonunda boşluk içerir.Sorguda karşılaştırma 'abc' gibi bir dize içeren tüm satırları verir (abc izleyen tek bir boşlukla), o sütun değerini abc (abc bir boşluk bırakmazsanız) olduğu satır döndürülmez.Ancak, hangi desenle eşleşiyor, ifade sonunda boşluklar göz ardı edilir.Sorguda karşılaştırma 'abc' gibi dize içeren tüm satırları verir bir boşluk bırakmazsanız (abc), abc ile başlatın ve sondaki boşlukları sıfır veya daha fazla olan tüm satır döndürülür.

İçeren bir deseni kullanarak bir dize karşılaştırma char ve varchar veri değil geçmek LIKE verileri nasıl depolandığını yüzünden.Her veri depolama anlamalısınız türü ve LIKE nerede başarısız olabilir.Aşağıdaki örnek yerel geçirmeden char değişken saklı yordam ve ardından kullandığı desen eşleştirme bulunacak tüm çalışanların soyadları başlatmak ile bir belirtilen küme , karakter.

USE AdventureWorks2008R2;
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 FindEmployee yordamı, hiçbir satır döndürülür nedeniyle char değişkeni (@EmpLName) adı az 20 karakter var. olduğunda arkadaki boşluklar içerenÇünkü LastName sütun varcharvardır sonunda bir boşluk yok.Arkadaki boşluklar önemli olduğu için bu yordamı başarısız olur.

Arkadaki boşluklar eklenir değil çünkü, ancak, aşağıdaki örnek başarılı bir varchar değişkeni.

USE AdventureWorks2008R2;
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 desen eşleştirme gibi.Zaman tüm bağımsız değişkenler (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ürlerinin, tüm bağımsız değişkenler için Unicode dönüştürülür ve Unicode desen eşleştirme yapılır.Unicode verilerini kullandığınızda (nchar veya nvarchar veri türleri) ile benzer, arkadaki boşluklar önemli; Ancak, Unicode olmayan veri için arkadaki boşluklar önemli değildir.Unicode gibi standart ISO ile uyumludur.ASCII gibi önceki sürümleri ile uyumlu SQL Server.

ASCII ve Unicode LIKE desen eşleştirme arasında döndürülen satır farklılıkları gösteren örnekler aşağıdaki dizisidir.

-- 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ırmalar gibi harmanlamatarafından etkilenir.Daha fazla bilgi için, bkz. HARMANLAMA (Transact-SQL).

% Joker karakter kullanma

LIKE ' 5 %' Sembol belirtilmişse, Veritabanı Altyapısı 5 numarayı arar ardından herhangi bir dize sıfır veya daha fazla karakter.

Örneğin, aşağıdaki sorgu tüm dinamik yönetimi görünümleri gösterir AdventureWorks2008R2 veritabanı, çünkü tüm başlatmaları harfler ile dm.

USE AdventureWorks2008R2;
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%'.Toplam 32 nesnelerinin var ise bulur gibi LIKE desen 19 nesneleri bulur gibi bir desenle eşleşen 13 adları eşleşmiyor.

Siz her zaman aynı adları desenle gibi bulamayabilir LIKE '[^d][^m]%'.19 Adları yerine, sadece 14 ' ile başlayan tüm adları ile bulabilirsiniz d veya m ikinci harfi olarak ortadan sonuçlarve dinamik yönetim görünümü adları.Negatif joker karakter eşleştir dizelerle adımlarda, belirli bir saatbir joker karakter değerlendirilir olmasıdır.Değerlendirme herhangi bir aşamada eşleştirme başarısız olursa, ortadan kaldırılır.

Hazır joker karakterler kullanma

Desen eşleştirme karakteri harf karakter olarak kullanabilirsiniz.Bir joker karakter harf karakter olarak kullanmak için joker karakteri köşeli ayraç içine alın.Aşağıdaki tablo birkaç LIKE anahtar sözcüğünü ve [] joker karakter kullanma örnekleri gösterir.

Simge

Anlamı

'5 [%]' GİBİ

5%

'[_] N' gibi

_n

'[A-cdf gibi]'

a, b, c, d veya f

GİBİ ' [-acdf]'

-, a, c, d ve f

'[' GİBİ

[

GİBİ ']'

]

'Abc [_] d % gibi'

abc_d ve abc_de

'Abc [def]' gibi

Abcd abce ve abcf

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

Bir veya daha çok özel joker karakter içeren karakter dizeleri için arama yapabilirsiniz.Örneğin, discounts tablo bir customers veritabanı, yüzde işareti (%) dahil iskonto değerlerini depolayabilir.Yüzde işareti yerine bir karakter gibi joker karakter olarak aramak için KAÇIŞ anahtar sözcük ve çıkış karakteri sağlanmalıdır.Örneğin, adlı bir sütun bir sample veritabanı içerir comment içeren metin %30.%30 Herhangi bir dize içeren tüm satırları bulmak için comment sütunbelirtmek gibi bir where yan tümce WHERE comment LIKE '%30!%%' ESCAPE '!'.KAÇIŞ ve çıkış karakteri belirtilmezse, Veritabanı Altyapısı dize 30 tüm satırları verir.

Hiçbir karakter varsa sonra çıkış karakteri LIKE desen, desen geçerli değil ve BENZERİ false döndürür.Karakterin arkasına bir kaçış karakterini joker karakter değilse, çıkış karakteri atılır ve çıkış aşağıdaki karakter desen normal karakter olarak işlenir.Bu yüzde (%) işareti içeren alt çizgiyle (_) ve çift köşeli ayraç ([]) içine alınır, köşeli ayraç ([]) joker karakter sol.Ayrıca, çift köşeli ayraç karakterleri ([]) içinde karakterler kullanılabilir çıkış ve şapka (^), tire (-) ve sağ köşeli ayraç (]) virgüllerden önce.

Örnekler

A.% Joker karakterini kullanarak gibi

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

USE AdventureWorks2008R2;
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.BENZER değil % joker karakter kullanma

Aşağıdaki örnek, tüm telefon numaraları bulur PersonPhone tablo alan kodları dışındaki sahip 415.

USE AdventureWorks2008R2;
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ümcekullanarak

Aşağıdaki örnek ESCAPEyan tümce ve tam karakter dizebulmak için çıkış karakteri 10-15% sütun c1 , mytbl2tablo.

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, çalışanlar üzerinde bulur Person tablo adı ile Cheryl veya Sheryl.

USE AdventureWorks2008R2;
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çerentablo Zheng veya Zhang.

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