SQL Server中LIKE和PATINDEX的用法

2019-01-27  本文已影响0人  落日流水

来源:https://blog.guoqianfan.com/2019/01/27/how-to-use-like-and-patindex-in-sqlserver/

在SQL Server中,能使用通配符的只有2个:LIKE、PATINDEX。

不过LIKE支持2种通配符转义,无限制最全面;而PATINDEX只支持最简单的通配符转义([]转义),限制较多。

LIKE

LIKE 是逻辑运算符,能使用通配符,并且支持2种方法来转义通配符。

语法

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

[ XX ]代表是可选的,所以可以没有转义表达式ESCAPE escape_character

参数

结果类型

Boolean

结果值

如果 match_expression 与指定的 pattern 相匹配,则 LIKE 返回 TRUE。

备注

何时忽略尾随空格

测试sql如下:

--pattern里有空格时必须匹配
select 1 where '123' like '123 ';
--无

--pattern里无空格时会忽略match_expression的【尾随】空格
select 1 where '123 ' like '123';
--1

--pattern里无空格时【不会】忽略match_expression的【前置】空格
select 1 where ' 123' like '123';
--无

否定的几种形式

相等

'xx' NOT LIKE 'yy' = NOT 'xx' LIKE 'yy'

不相等

NOT LIKE 'dm%' != LIKE '[^d][^m]%'

通配符的转义

通配符当做普通字符来使用,有2种方式。

使用[]

[]这种方式只适合简单的情况,有很多限制,不推荐。

能转义的字符有:百分号 (%)、下划线 (_) 和左括号 ([) ,其他的转义不了,或者只能特殊情况下使用(例如短横线-只有在首位时才被视为普通字符)。如果强行使用[]来转义会导致结果错误!!推荐使用ESCAPE子句来进行转义。

使用ESCAPE子句

ESCAPE子句本来就是为转义而生,推荐使用。

ESCAPE子句的转义字符是自定义的,定义为某字符,pattern里就使用这个转义字符来转义即可。

相关sql如下:

--转义【%】
select 1 where '%123' like '\%123' ESCAPE '\'
--1

--转义【_】
select 1 where '123_' like '123\_' ESCAPE '\'
--1

--转义【[^]】
select 1 where '123[^]' like '123\[\^\]' ESCAPE '\'
--1

--自定义其他转义字符:%
select 1 where '123[^]%_' like '123%[%^%]%%%_' ESCAPE '%'
--1

PATINDEX

PATINDEX 属于字符串函数,支持通配符,转义通配符只能使用[],所以限制颇多。

PATINDEX 返回模式在指定表达式中第一次出现的起始位置(从1开始);如果在所有有效的文本和字符数据类型中都找不到该模式,则返回零。

语法

PATINDEX ( '%pattern%' , expression )

参数

返回类型

如果 expression 的数据类型为 varchar(max) 或 nvarchar(max),则返回 bigint;否则返回 int。

结果值

返回模式在指定表达式中第一次出现的起始位置(从1开始);如果在所有有效的文本和字符数据类型中都找不到该模式,则返回零。

备注

参考

  1. LIKE (Transact-SQL):https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms179859%28v%3dsql.110%29
  2. PATINDEX (Transact-SQL):https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms188395(v%3dsql.110)
上一篇下一篇

猜你喜欢

热点阅读