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’表中所有以‘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’表中,’FirstName’包含字母’a’且’LastName’后跟任意字符再跟字母’l’的行。

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/