函数表达式 | 作用 |
---|---|
CHARINDEX (expression1 , expression2 [ , start_location ] ) | 查找字符串在另一个字符串中开始位置 |
PATINDEX ( ’%pattern%’ , expression ) | 返回搜索字符串在被搜索字符串中的起始位置 |
主要区别:
PATINDEX() 支持通配符来查找,CHARINDEX() 不支持通配符查找。
注意事项:
(1)如果在被查找字符串中出现多次子字符串,PATINDEX() 函数返回的是第一次出现的位置下标。
(2)PATINDEX() 必须要用通配符,否则查询不到子字符串。
#表达式:CHARINDEX(expression1, expression2 [,start_location])--[选填内容]
select CHARINDEX('server','sqlserver2012server',4)--返回4
select CHARINDEX('server','sqlserver2012server',5)--返回14
select CHARINDEX('server','sqlserver2012',2)--返回4,start_location指开始检索的位置,并不会影响最后的索引号
select CHARINDEX('server','sqlserver2012')--返回4
--表达式:PATINDEX('%pattern%', expression)
select PATINDEX('%BC%', 'ABCDEFG')--返回2
select PATINDEX('ABC%', 'ABCDEFG')--返回1,如果知道被搜索的字符串是由指定字符串开始的,可以省略%
select PATINDEX('%[A,Z,0-9]%[A,Z,0-9]%[A,Z,0-9]%','XYZABC123')--确认字符串是否含有A和Z或者任何数字
select patindex('%[^0-9]%','201906')--返回0
select patindex('%[^0-9]%','你好') --返回1