T-SQL LIKE 運算子 是 SQL SELECT 陳述中最有用的新增功能之一。後者檢索結果集,您可以輕鬆使用等式運算子和 WHERE 子句 來選擇特定條件。但是,當您想要基於部分值選擇行時該怎麼辦?這就是 SQL LIKE 陳述的作用,我將在本教程中向您展示如何使用它。
SQL LIKE 語法
您可以在以下清單中看到 LIKE 運算子的基本語法:
- 首先,您提供要匹配的表達式。這通常是列名稱。
- 接下來,您可以選擇性地指定 NOT 來使此表達式對所有不匹配的條件起作用。使用 NOT LIKE 條件不是使用 LIKE 運算子的最常見方式。
- 然後,您需要提供要匹配的模式。這可以是字面意義上的,也可以包含通配符,使匹配過程更加靈活。
- 這可以選擇性地跟隨一個轉義字符,用於幫助搜索通配符。
- 如果任何參數不是字符串數據類型,SQL Server將將其轉換為字符串數據類型。
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
SQL LIKE和通配符
在我們深入細節之前,您應該知道SQL LIKE模式匹配可以包括常規字符以及通配符。通配符使您能夠選擇與通配符模式匹配的特定字符串。
對於模式匹配,常規字符必須與字符串中指定的字符匹配。然而,通配符可以與字符串的任何片段匹配。使用通配符使LIKE運算符比常規相等(=和!=)字符串比較運算符更靈活。
LIKE運算符接受四種不同類型的通配符。每個通配符執行不同的比較功能,您可以在下表中了解更多信息。
Wildcard character | Description |
% (percent sign) | Any string of zero or more characters. |
_ (underscore) | Any single character. |
[ ] | Any single character within the specified range [a-f] or set [abcdef]. |
[^] | Any single character not within the specified range [^a-f] or set [^abcdef]. |
如果match_expression與指定模式匹配,LIKE運算符將返回TRUE。讓我們使用一些示例向您展示如何使用SQL LIKE運算符與AdventureWorksLT2019示例數據庫。
匹配多個通配符
% 萬用字元 代表零個或多個字元。以下查詢擷取所有從 ‘Person.Person’ 表中 ‘LastName’ 以字母 ‘A’ 開頭的列。
USE AdventureWorksLT2019; SELECT FirstName, LastName FROM SalesLT.Customer WHERE LastName LIKE 'A%';

單一字元萬用符配對
_ 萬用符 代表單一字元。以下範例查詢擷取所有從 ‘SalesLT.Product’ 表中 ‘Name’ 為任何類型的四個字元後跟一個連字號的列。
USE AdventureWorksLT2019; SELECT ProductID, Name FROM SalesLT.Product WHERE Name LIKE '____-%';

一組字元的萬用符配對
[]萬用字元代表指定範圍或集合內的任何單個字符。以下 SQL 语句检索所有从 ‘SalesLT.Product’ 表中‘Name’ 以 ‘B’、‘C’ 或 ‘D’ 开头的行。
USE AdventureWorksLT2019; SELECT Name FROM SalesLT.Product WHERE Name LIKE '[BCD]%';

字符范围的萬用字元匹配
您也可以使用 LIKE 子句来支持范围搜索。此查询检索以 ‘ee’ 结尾且以字母 ‘C’ 和 ‘L’ 之间的任何单个字符开头的姓氏。
USE AdventureworksLT2019; SELECT LastName, FirstName FROM SalesLT.Customer WHERE LastName LIKE '[C-L]ee'

排除不属于指定集合的字符
[^]萬用字元代表不在指定范围或集合内的任何单个字符。以下查询检索所有从 ‘SalesLT.Product’ 表中‘Name’ 不以 ‘A’、‘B’ 或 ‘C’ 开头的行。
USE AdventureworksLT2019; SELECT Name FROM SalesLT.Product WHERE Name LIKE '[^ABC]%';

使用多個萬用字元匹配條件
LIKE子句也可以與多個萬用字元結合在單個查詢中。以下查詢使用多個SQL萬用字元從’Person.Person’表中檢索所有包含字母’a’的’FirstName’和’LastName’後面跟有任何字符的行。
USE AdventureworksLT2019; SELECT FirstName, LastName FROM SalesLT.Customer WHERE FirstName LIKE '%a%' AND LastName LIKE '_l%';

搜索萬用字元
萬用字元匹配為LIKE運算符增加了很多功能和靈活性。不過,您可能想知道如何使用LIKE來匹配這些萬用字元本身。
為此,您可以將萬用字元括在方括號內,這允許您將萬用字元用作字面字符。您可以在以下表中看到一些示例。
Pattern | Search value |
LIKE ‘%2[%]%’ | 2% |
LIKE ‘%[_]m%’ | _m |
LIKE ‘%[ [ ]%’ | [ |
- 第一個示例匹配數字2後面跟著百分比萬用字符。
- 第二個示例匹配下劃線字符後面跟著字母m。
- 第三個示例用於匹配方括號字符。

SQL LIKE語句增強了SQL SELECT語句
你現在應該更了解如何使用 SQL LIKE 運算子來增強 SQL SELECT 陳述的功能和靈活性。在這裡,我還向你展示了如何使用 LIKE 子句與各種萬用字元。在匹配多個萬用字元、執行單個字符匹配、匹配一組字符或從結果中排除字符之間,你確實有很多可能性。
Source:
https://petri.com/sql-like/