SQL Server PATINDEX() 函数:搜索字符串模式
在 SQL Server 中,PATINDEX()
搜索给定表达式中模式的第一次出现,并返回其起始位置。如果未找到模式,则返回零。
PATINDEX(pattern, input_string)
参数
- 模式:要查找的字符表达式。它必须以 % 字符开头和结尾。可以在模式中使用通配符,例如 %、_、[]、[^]。
- input_string:要在其中搜索模式的字符串。它可以是常量字符串或表列。
返回值
如果输入字符串的数据类型为 varchar(max) 或 nvarchar(max),则返回 bigint,否则返回 int。
PATINDEX()
的起始位置为 NULL。如果模式或输入字符串为 NULL,则 PATINDEX()
返回 NULL。
示例 1
以下示例在输入字符串 'Hello! Have a nice day.' 中查找 'llo'。模式应包含在 % 中。
示例:PATINDEX()
SELECT PATINDEX ('%llo%', 'Hello! Have a nice day.') AS PatternPosition

示例 2
在以下示例中,我们在 Employee 表的 Email 列中查找模式 'abc.com'。Email 列中包含此模式的所有行都返回模式的起始位置,Email 中不包含此模式的行则返回零。
示例:PATINDEX()
SELECT Email, PATINDEX('%abc.com%', EMail) AS PatternPosition FROM Employee

示例 3
以下示例在搜索模式中使用了通配符 % 和 _。
% 匹配任意长度的任意字符串,而 _ 匹配任意单个字符。
示例:PATINDEX()
SELECT PATINDEX('%ni_e%', 'Hello! Have a nice day.') AS PatternPosition

示例 4
以下示例显示了输入字符串中不存在模式的情况。
示例:PATINDEX()
SELECT PATINDEX('%world%', 'Hello! Have a nice day.') AS PatternPosition

示例 5
以下示例显示 PATINDEX()
不区分大小写。
示例:PATINDEX()
SELECT PATINDEX('%hello%', 'Hello! Have a nice day.') AS PatternPosition
