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. 最全面的homogeneous单应性坐标的定义,以及不同投影,仿射,相似,刚体变换矩阵的关系和自由度分析
  2. [Life Sciences.AI]专栏介绍及内容分类(持续更新......)
  3. oracle测试没响应,Oracle JDBC 没响应,是不是BUG?
  4. 这个为生信学习打造的开源Bash教程真香!!(目录更新)!
  5. Spring : Spring @Transactional-嵌套事物回滚
  6. go的转义字符,字符串本身带有特殊符号
  7. pyjion python3.6_Pyjion的代码质量一例 [20160221]
  8. Mac OS git多次需要输入用户名密码config解决
  9. 0基础入门VTD-实操静态道路建模4
  10. 考证党必备的5个神仙APP,助你日常高效充电
  11. python调用def函数的格式_Python 函数def 模块调用函数方法及全局变量
  12. ▶国务院关于延长中秋国庆放假至10天的通知
  13. 关于微信开发者没有上传按钮的问题
  14. 苹果安卓APP下载地址合并为一个二维码
  15. 深度揭密SSD中的原片-白片-黑片:莫贪小便宜
  16. idea打开多个小窗口换行
  17. redis出现WRONGTYPE Operation against a key holding the wrong kind of value错误
  18. 微前端之实现方式和项目分析、实践主子应用启动配置、vue2、vue3、react15、react16 子应用的配置
  19. 用Annchain,加分
  20. IE7.0,IE8.0卸载方法,回到IE6.0

热门文章

  1. Mybatis入门:2(xml形式的增删改查)
  2. SQL基础学习总结:6(INSERT语句的相关使用方法)
  3. SQL基础学习总结:5(HAVING子句的使用ORDER BY排序子句的使用)
  4. c语言中手机系统,一种手机课堂C语言编程系统的制作方法
  5. oracle非归档模式下如何备份,Oracle之RMAN数据库在非归档模式下的备份和恢复
  6. 动态刷新_屋盖“起飞”刷新国内记录,中建八局杭州萧山国际机场项目最新动态来袭...
  7. NLP学习 资料总结
  8. iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署)
  9. python unicodedecodeerror utf8_python-pip install和UnicodeDecodeError:’utf-8’编...
  10. 美妆彩妆宣传PPT模板