SQL Server:SQL Like 的特殊用法

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

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 '\'

以上转载自:http://www.sqlstudy.com/sql_article.php?id=2008061601

SQL 通配符

在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。

SQL 通配符必须与 LIKE 运算符一起使用。

在 SQL 中,可使用以下通配符:

通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符

原始的表 (用在例子中的):

Persons 表:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

使用 % 通配符

例子 1

现在,我们希望从上面的 "Persons" 表中选取居住在以 "Ne" 开始的城市里的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons WHERE City LIKE 'Ne%'

结果集:

Id LastName FirstName Address City
2 Bush George Fifth Avenue New York

例子 2

接下来,我们希望从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons WHERE City LIKE '%lond%'

结果集:

Id LastName FirstName Address City
1 Adams John Oxford Street London

使用 _ 通配符

例子 1

现在,我们希望从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons WHERE FirstName LIKE '_eorge'

结果集:

Id LastName FirstName Address City
2 Bush George Fifth Avenue New York

例子 2

接下来,我们希望从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'

结果集:

Id LastName FirstName Address City
3 Carter Thomas Changan Street Beijing

使用 [charlist] 通配符

例子 1

现在,我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons WHERE City LIKE '[ALN]%'

结果集:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York

例子 2

现在,我们希望从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

结果集:

Id LastName FirstName Address City
3 Carter Thomas Changan Street Beijing

以上转载自:http://www.w3school.com.cn/sql/sql_wildcards.asp

笔者代码:

实现需求:匹配并获取表格中第二列出现过某特殊字符的所有行。

代码:

create table #tbl(k int,v nvarchar(30))
insert into #tbl select 1,'1+中为1+2' union select 2,'1+中为+1' union select 3,'中为' union select 4,'中为+1'declare @x1 nvarchar(30)
set @x1 = '中为'declare @prefix nvarchar(20)
set @prefix = '[+!-*/()[!]<>,]'

select * from #tbl where (v like '%'+@prefix+@x1+@prefix+'%' escape '!') or (v like @x1+@prefix+'%' escape '!')or (v like '%'+@prefix+@x1 escape '!')or (v = @x1)
drop table #tbl

执行结果为:

2 1+中为+1
3 中为
4 中为+1

技术有限,本例中的查询语句后面的where语句用了三个or,只为匹配开头和结尾的特殊字符,代码比较笨重,同时会增加系统的开销。如果更好的实现方法,望多多指教!

TSQL语句中的Like用法相关推荐

  1. 在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)

    原文:在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery) 1.启用Ad Hoc Distributed Queries 在使用openrowse ...

  2. IsNull 和 SQL语句中CASE WHEN用法

    [转]IsNull 和 SQL语句中CASE WHEN用法收藏   [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL     使用指定的替换值替换   NULL.      ...

  3. sql语句中的in用法示例_PHP中的循环语句和示例

    sql语句中的in用法示例 循环 (Loops) Imagine that we need a program that says "hello world" 100 times. ...

  4. sql语句中的in用法示例_示例中JavaScript in操作符

    sql语句中的in用法示例 One of the first topics you'll come across when learning JavaScript (or any other prog ...

  5. python里else中文意思_Python循环语句中else的用法总结

    前言 本文讨论Python的for-else和while-else等语法,这些是Python中最不常用.最为误解的语法特性之一. Python中的for.while等循环都有一个可选的else分支(类 ...

  6. tsql语句中的t是什么_TSQL中的Java HashCode

    tsql语句中的t是什么 The Java HashCode method is used to determine uniqueness or similarity of strings. Whil ...

  7. mysql语句中limt_mysql sql语句中的limit用法

    mysql sql语句中的limit用法 1.select * from tablename limit 100,15 从100条记录后开始(不包括第100条记录)取出15条记录 (实际取出的是第 1 ...

  8. sql语句中的limit用法

    sql语句中的limit用法 limit 用于限制查询结果返回. 用法: limit a,b 其中a表示查询数据的起始位置,b表示返回的数量. (MySQL数据库中的记录是从0开始的) 举例: SEL ...

  9. SQL语句中JOIN的用法

    记录:257 写SQL最高境界:SELECT * FROM 表名.当然这是一句自嘲.探究一下SQL语句中JOIN的用法,直到经历这个场景,变得想验证一下究竟. 一.场景 把关系型数据库A中表TEST_ ...

最新文章

  1. 使用jpcap获取网卡硬件
  2. 【未完待续】Git个人solo实际常用命令
  3. SAP Spartacus b2b 页面 banner 的grid layout设计
  4. python opencv旋转_Python opencv实现与rotatedrect类似的矩形旋转,pythonopencv,RotatedRect
  5. android 传感器 应用,Android移动设备中传感器的应用
  6. C++语言类的继承与派生介绍和示例
  7. 贝叶斯数据分析_科研进阶项目 | 剑桥大学 | 心理学、社会学、生物医学:统计数据分析(6.13开课)...
  8. [delphi函数]RenameFile 文件改名
  9. KVM 虚拟化原理探究(5)— 网络IO虚拟化
  10. ​ [RHEL7.1]重新封装系统(制作模板)
  11. TWaver HTML5 高性能拓扑
  12. 中国地质大学英语语音学习笔记(一):元音(单元音,双元音,三元音)
  13. HTML和CSS仿唯品会首页,ecshop仿唯品会2014全模板带团购品牌特卖
  14. 小博老师浅谈Context(一)
  15. 二叉树的遍历——层序遍历
  16. 100道iOS面试题
  17. 以计算机专业为主的活动,院系宣传 | 计算机科学与技术系:以梦为码
  18. linux maskrom模式,微雪电子RK3308主板CC启动模式介绍
  19. SAP CTRL加逗号,句号后注释和取消注释不起作用的解决方法
  20. 尚学堂JAVA第四章课后答案

热门文章

  1. Java学习总结:5
  2. golang不编译.html,golang之条件编译
  3. ecliplse 调试android 断点,如何在Github maven项目上开始调试
  4. mysql中的%_mysql入门
  5. signature=680da11b802226668317d65ae7c38eb7,encryption with designated verifiers
  6. iOS超全开源框架、项目和学习资料汇总(1)UI篇
  7. js 微信小程序日期 时间转时间戳
  8. 微信小程序把缓存的数组动态渲染到页面
  9. 云解析DNS产品优势与应用场景
  10. ZooKeeper学习笔记1-----------安装启动