SQL Server:SQL Like 通配符特殊用法:Escape

%:匹配零个及多个任意字符; _:与任意单字符匹配; []:匹配一个范围; [^]:排除一个范围 ;-:连字符

Symbol Meaning 
like ‘5[%]‘ 5% 
like ‘[_]n‘ _n 
like ‘[a-cdf]‘ a, b, c, d, or f 
like ‘[-acdf]‘ -, a, c, d, or f 
like ‘[[]‘ [ 
like ‘]‘ ] 
like ‘abc[_]d%‘ abc_d and abc_de 
like ‘abc[def]‘ abcd, abce, and abcf 
like ‘[^1-9]‘ 0 
like ‘[^1-9b-z]‘ 0, a

对于字符串中出现的特殊字符:‘%‘,‘[‘,‘[]‘, ‘_‘ 可以使用 ‘[]‘ 把它们包含起来,这样在匹配模式(pattern)中,它们就被当作普通字符对待了。

1. 用 like ‘[[]‘ 匹配特殊字符 ‘[‘

select 1 where ‘[ABCDE‘ like ‘[[]%‘

2. 用 like ‘]‘ 匹配特殊字符 ‘]‘

select 1 where ‘]ABCDE‘ like ‘]%‘

3. 用 like ‘[[]]‘ 匹配特殊字符 ‘[]‘

select 1 where ‘[]ABCDE‘ like ‘[[]]%%‘

4. 用 like ‘[_]‘ 匹配特殊字符 ‘_‘

select 1 where ‘_ABCDE‘ like ‘[_]%‘

5. 用 like ‘[%]‘ 匹配特殊字符 ‘%‘

select 1 where ‘ABC%DE‘ like ‘ABC[%]DE‘

对于其他的特殊字符:‘^‘, ‘-‘, ‘]‘ 因为它们本身在包含在 ‘[]‘ 中使用,所以需要用另外的方式来转义,于是就引入了 like 中的 escape 子句,另外值得注意的是:escape 可以转义所有的特殊字符。

select 1 where ‘^ABCDE‘ like ‘!^ABCDE‘ escape ‘!‘
select 1 where ‘-ABCDE‘ like ‘!-ABCDE‘ escape ‘!‘
select 1 where ‘]ABCDE‘ like ‘!]ABCDE‘ escape ‘!‘

select 1 where ‘%ABCDE‘ like ‘\%ABCDE‘ escape ‘\‘
select 1 where ‘%ABCDE‘ like ‘!%ABCDE‘ escape ‘!‘
select 1 where ‘%ABCDE‘ like ‘#%ABCDE‘ escape ‘#‘
select 1 where ‘%ABCDE‘ like ‘@%ABCDE‘ escape ‘@‘

select 1 where ‘[ABCDE‘ like ‘![ABCDE‘ escape ‘!‘
select 1 where ‘]ABCDE‘ like ‘!]ABCDE‘ escape ‘!‘

看出规律了吧,就是用 escape 后面紧跟着的字符来做转义字符。 escape 后面的字符相当于 C 语言字符串中的转义字符 ‘\‘。

最后,看一个更加复杂的匹配,注意“-”这个也是特殊字符也需转义。

select 1 where ‘[^A-Z]ABCDE‘ like ‘\[\^A\-Z\]%‘ escape ‘\‘

后记:用过正则表达式的朋友应该都知道,在正则表达式里可以用*表示匹配0次或是多次, [\u4e00-\u9fa5]这个可以匹配中文,但在这里我没有发现类似的功能,所以匹配一些复杂的语句就比较头疼。如我要匹配形如:印张数量*单价、200+印张数量*单价、印张数量,但不匹配形如:印张数量5*单价、印张数量6767、55印张数量uu的数据就很难实现了。

下面这个就是要匹配包括“纺梦”这两个字,但这两个字只能是与“+-*/”这四个字符相连或是单独存在。如果这里的“纺梦”是任意中文字符就没办法去处理了。

create table #tbl(n int,v nvarchar(100))
insert into #tbl
    select 1,‘1+纺梦1+2‘
    union select 2,‘1+纺梦+1‘
    union select 3,‘纺梦‘
    union select 4,‘纺梦+1‘

select * from #tbl
where (v like ‘%[+\-*/]纺梦[+\-*/]%‘ ESCAPE ‘\‘)
    or (v like ‘纺梦[+\-*/]%‘ ESCAPE ‘\‘)
    or (v like ‘%[+\-*/]纺梦‘ ESCAPE ‘\‘)
    or (v = ‘纺梦‘)

--select * from #tbl
drop table #tbl

时间: 2024-11-11 22:46:43

SQL Server:SQL Like 通配符特殊用法:Escape的相关文章

SQL Server中except和intersect用法

except是A集合减去B集合的结果:intersect是A集合和B集合的交集:都是返回的是非重复值,很多属性都和union类似. 还是以student为例 select * from student; select * into student1 from student; go insert into student1 values('aaa',20,'Js'),('bbb',30,'js'),('ccc',40,'sh'); go insert into student1 values('

sql server 数据库机种 insert 语句用法insert into emproyee(e_name,e_sex)values('唐家三少',0); insert into emproyee

刚倒弄sql server 对insert 语句插入多条数据时总结下> 单条数据插入: insert into emproyee(e_name,e_sex)values('唐家三少',0); insert into emproyee(e_name,e_sex)select'骷髅精灵',0 多条数据插入: insert into emproyee(e_name,e_sex)select'天蚕土豆',0 union all select '我吃西红柿',0 union all select '逆苍天

对SQL Server SQL语句进行优化的10个原则

1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存放在数据页上.合理的索引设计要建立在对各种查询的分析和预测上.一般来说:①.有大量重复值.且经常有范围查询(between, >,< ,>=,< =)和order by.group by发生的列,可考虑建立群集索引:②.经常同时存取多列,且每列都含有重复值可考虑建立组合索引:③.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列. 2.IS NUL

[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]列名 &#39;user1&#39; 无效

唉,还是自己对php执行sql语句运用不熟练.... 我的错误代码是这样的,(解决办法在最后) $re=sqlsrv_query($conn, "select * from visitor where username = ".$name); $row = sqlsrv_fetch_array($re); if (is_null($re) || !$re) { print_r(sqlsrv_errors()); } 一开始只有前两行,然后报错,通过 sqlsrv_errors() 输出

《转》SQL server事务的两种用法()

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性. 在sql server+ .net 开发环境下,有两种方法能够完成事务的操作,保持数据库的数据完整性: 一个就是用sql存储过程,另一个就是在ADO.NET中一种简单的事务处理: 现在通过一个典型的银行转账的例子来说明一下这两个例子的用法 我们先来看看sql存储过程是如何来

Sql server 事务的两种用法

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性. 在sql server+ .net 开发环境下,有两种方法能够完成事务的操作,保持数据库的数据完整性: 一个就是用sql存储过程,另一个就是在ADO.NET中一种简单的事务处理: 现在通过一个典型的银行转账的例子来说明一下这两个例子的用法 我们先来看看sql存储过程是如何来

Sql Server字符的处理(LastIndexOf用法),STUFF、CHARINDEX、REVERSE、LEN

DECLARE @s VARCHAR(100) SET @s='R1-1-1'   获取最后一个"-"之后的数字 select REVERSE(@s)    返回值:1-1-1R  将字符颠倒过来 select LEN(@s)             返回值:6  获取长度 select CHARINDEX('-',REVERSE(@s))                     返回值:2   --获取某个字符串第一次出现的位置,若没有改字符,则返回0 select STUFF(@s

SQL Server中COALESCE函数的用法

在SQL Server中COALESCE函数,会返回其参数中第一个不为NULL的参数,效果如下: SELECT COALESCE(NULL,NULL,N'A',NULL,NULL) 结果: SELECT COALESCE(NULL,NULL,N'A',N'B',N'C',NULL) 结果: 使用COALESCE函数时要注意,其参数必须是相同的类型,例如下面的例子中COALESCE函数的参数中,既有字符串类型又有数字类型,就会报错: SELECT COALESCE(NULL,NULL,N'A',N

SQL Server -&gt;&gt; SQL Server 2016新特性之 --- Query Store

前言 SQL Server 2016引入新的查询语句性能监控.调试和优化工具/功能 -- Query Store.以前我们发现一条查询语句性能突然下降,我们要去找出问题的所在往往需要通过调用一些DMV(比如sys.dm_exec_query_stats, sys.dm_exec_sql_text和sys.dm_exec_query_plan)来获取查询计划的一些信息,比如XML格式的执行计划,查询语句的代码,执行了多少次以及一些资源和时间的的使用消耗情况.然后根据这些信息来判断这条语句是否存在性

[MS SQL Server]SQL Server如何开启远程访问

在日常工作中,经常需要连接到远程的MS SQL Server数据库中.当然也经常会出现下面的连接错误. 解决方法: 1. 设置数据库允许远程连接,数据库实例名-->右键--->属性---Connections---->勾选 Allow remote connections to this server. 2. 开启TCP/IP协议: Sql Server Configuration Manager---> Protocols for SQLEXPRESS ---> TCP/I