Home >> Blog >> like sql 邏輯運算符介紹和概述 sql like 使用方式
like sql 邏輯運算符介紹和概述 sql like 使用方式
SQL Like 是一個邏輯運算符,用於確定特定字符串是否與指定模式匹配。它通常用於 Where 子句中以在列中搜索指定的模式。
當我們需要執行模式匹配而不是相等或不相等時,此運算符可能很有用。如果特定字符串與指定模式匹配,則當我們想要返回行時使用 SQL Like。模式可以是常規字符和通配符的組合。
要返回一行,常規字符必須與字符串中指定的字符完全匹配。通配符可以與字符串的任意部分匹配。
讓我們使用AdventureWorks示例數據庫並查看一些帶有 '%' 和 '_' 通配符的不同 SQL Like 運算符。
使用 % 通配符(表示零個、一個或多個字符)
下面的查詢返回“PersonPhone”表中所有區號為“415”的電話號碼:
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
請注意,在 Where 子句中指定了“415%”符號。這意味著 SQL Server 將搜索數字 415,後跟任何零個或多個字符的字符串。這是結果集:
非邏輯運算符反轉任何布爾表達式的值。因此,如果我們只是在 SQL Like 子句中使用 '%' 通配符指定 Not like,則添加一個附加條件並將其放在與上述相同的語句中,我們應該得到如下查詢:
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
這一次,查詢返回了“PersonPhone”表中區號不是 415 的所有記錄:
此外,假設我們要查找名稱中包含“ssa”的所有記錄。我們可以使用下面的查詢:
SELECT p.FirstName, p.LastName
FROM Person.Person AS p
WHERE LastName LIKE '%ssa%'
ORDER BY p.LastName;
GO
請注意,通過在“ssa”之前和之後使用“%”,我們告訴 SQL Server 查找“Person.Person”中包含“ssa”字符的所有記錄,而不管“之前和之後的其他字符是什麼” ssa”:
使用“_”通配符(表示單個字符)
當我們想要檢查可以是任何字符的單個字符並為我們的匹配提供其餘字符時,使用 SQL Like 下劃線字符,例如 „。
假設我們要返回所有記錄,其中“FirstName”表的第一個字符可以是任何東西,但其餘的應該是“en”。使用以下查詢:
SELECT p.FirstName,
p.MiddleName
FROM Person.Person p
WHERE p.FirstName LIKE '_en';
GO
這是結果集:
請注意,通配符的組合也可以用在搜索模式的末尾。例如,要返回“PersonPhone”表中區號以 6 開頭並以 2 結尾的所有電話號碼,請使用以下查詢:
SELECT pp.PhoneNumber
FROM Person.PersonPhone pp
WHERE pp.PhoneNumber LIKE '6_2%'
GO
請注意,在下劃線字符之後使用“%”通配符,因為區號是電話號碼的第一部分,並且在列值之後存在其他字符:
使用 [ ] 方括號(指定範圍 [at] 或設置 [abc] 內的任何單個字符)
當我們想要範圍時,使用帶方括號的 SQL Like 運算符。假設我們要查找“FirstName”第一個字符以 [af] 開頭的所有行。使用以下查詢:
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE '[a-f]%';
GO
可以看出,我們使用了範圍 [af]%。這意味著將第一個字符從 a 返回到 f 之後,任何字符都可以,因為我們之後使用了 '%':
要返回集合中的任何單個字符,請使用以下示例在“Person”表中查找名字為 Cheryl 或 Sheryl 的員工:
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE '[CS]heryl';
GO
在這種情況下,此查詢將僅返回 Cheryl,但如果我們在數據庫中有任何記錄,它也會返回 Sheryl:
這是另一個我們實際上有混合結果的例子:
SELECT LastName, FirstName
FROM Person.Person
WHERE LastName LIKE 'Zh[ae]ng'
ORDER BY LastName ASC, FirstName ASC;
GO
上面的查詢在“Person”表中查找姓鄭或張的員工的記錄:
使用 [^] 方括號(不在指定範圍 [at] 或設置 [abc] 內的任何單個字符)
您可能已經猜到了,這與之前使用方括號的 SQL Like 運算符相反。假設我們要返回“FirstName”第一個字符不以 [a 到 f] 開頭的所有記錄:
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE '[^a-f]%';
GO
請注意,它只返回不以從 a 到 f 的任何字符開頭的記錄:
對於設置的示例,假設我們要獲取“FirstName”不以 a,d,j 開頭的所有記錄。我們可以使用下面的查詢:
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE '[^adj]%';
GO
這是結果集:
使用轉義子句
這是一個用於指定轉義字符的 SQL Like 謂詞。下面的查詢使用 Escape 子句和轉義字符:
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 INTO 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
它在 mytbl2 表的 c1 列中返回精確的字符串 10-15%:
我希望這篇關於 SQL Like 運算符的文章能夠提供有用的信息,感謝您的閱讀。
看更多
為了提高 SQL 編碼效率,請查看這些 用於 SSMS 和 Visual Studio 的SQL 工具,包括 T-SQL 格式化、重構、自動完成、文本和數據搜索、片段和自動替換、SQL 代碼和對像比較、多數據庫腳本比較, 對象解密等