SQL Server基础知识:使用SQL LIKE运算符

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].
The four different types of wildcard characters to use with the LIKE operator.

如果match_expression與指定模式匹配,LIKE運算符將返回TRUE。讓我們使用一些示例向您展示如何使用SQL LIKE運算符與AdventureWorksLT2019示例數據庫。

廣告

匹配多個通配符

% 萬用字元 代表零個或多個字元。以下查詢擷取所有從 ‘Person.Person’ 表中 ‘LastName’ 以字母 ‘A’ 開頭的列。

USE AdventureWorksLT2019;

SELECT FirstName, LastName FROM SalesLT.Customer

WHERE LastName LIKE 'A%';
Matching multiple wildcard characters (Image credit: Petri/Michael Otey)

單一字元萬用符配對

_ 萬用符 代表單一字元。以下範例查詢擷取所有從 ‘SalesLT.Product’ 表中 ‘Name’ 為任何類型的四個字元後跟一個連字號的列。

USE AdventureWorksLT2019;

SELECT ProductID, Name FROM SalesLT.Product

WHERE Name LIKE '____-%';
Single character wildcard matching (Image credit: Petri/Michael Otey)

一組字元的萬用符配對

[]萬用字元代表指定範圍或集合內的任何單個字符。以下 SQL 语句检索所有从 ‘SalesLT.Product’ 表中‘Name’ 以 ‘B’、‘C’ 或 ‘D’ 开头的行。

USE AdventureWorksLT2019;

SELECT Name FROM SalesLT.Product

WHERE Name LIKE '[BCD]%';
Wildcard matching for a set of characters (Image credit: Petri/Michael Otey)

字符范围的萬用字元匹配

您也可以使用 LIKE 子句来支持范围搜索。此查询检索以 ‘ee’ 结尾且以字母 ‘C’ 和 ‘L’ 之间的任何单个字符开头的姓氏。

广告

USE AdventureworksLT2019;

SELECT LastName, FirstName FROM SalesLT.Customer

WHERE LastName LIKE '[C-L]ee'
Wildcard matching for a range of characters (Image credit: Petri/Michael Otey)

排除不属于指定集合的字符

[^]萬用字元代表不在指定范围或集合内的任何单个字符。以下查询检索所有从 ‘SalesLT.Product’ 表中‘Name’ 不以 ‘A’、‘B’ 或 ‘C’ 开头的行。

USE AdventureworksLT2019;

SELECT Name FROM SalesLT.Product

WHERE Name LIKE '[^ABC]%';
Excluding characters that are not part of the specified set (Image credit: Petri/Michael Otey)

使用多個萬用字元匹配條件

LIKE子句也可以與多個萬用字元結合在單個查詢中。以下查詢使用多個SQL萬用字元從’Person.Person’表中檢索所有包含字母’a’的’FirstName’和’LastName’後面跟有任何字符的行。

USE AdventureworksLT2019;

SELECT FirstName, LastName FROM SalesLT.Customer

WHERE FirstName LIKE '%a%' AND LastName LIKE '_l%';
Using multiple wildcard matching conditions (Image credit: Petri/Michael Otey)

搜索萬用字元

萬用字元匹配為LIKE運算符增加了很多功能和靈活性。不過,您可能想知道如何使用LIKE來匹配這些萬用字元本身。

為此,您可以將萬用字元括在方括號內,這允許您將萬用字元用作字面字符。您可以在以下表中看到一些示例。

Pattern Search value
LIKE ‘%2[%]%’ 2%
LIKE ‘%[_]m%’ _m
LIKE ‘%[ [ ]%’ [
Searching for wildcard characters
  • 第一個示例匹配數字2後面跟著百分比萬用字符。
  • 第二個示例匹配下劃線字符後面跟著字母m。
  • 第三個示例用於匹配方括號字符。
(Image credit: Petri/Michael Otey)

SQL LIKE語句增強了SQL SELECT語句

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

Source:
https://petri.com/sql-like/