TSQL语句中的Like用法
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用法相关推荐
- 在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)
原文:在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery) 1.启用Ad Hoc Distributed Queries 在使用openrowse ...
- IsNull 和 SQL语句中CASE WHEN用法
[转]IsNull 和 SQL语句中CASE WHEN用法收藏 [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL 使用指定的替换值替换 NULL. ...
- sql语句中的in用法示例_PHP中的循环语句和示例
sql语句中的in用法示例 循环 (Loops) Imagine that we need a program that says "hello world" 100 times. ...
- sql语句中的in用法示例_示例中JavaScript in操作符
sql语句中的in用法示例 One of the first topics you'll come across when learning JavaScript (or any other prog ...
- python里else中文意思_Python循环语句中else的用法总结
前言 本文讨论Python的for-else和while-else等语法,这些是Python中最不常用.最为误解的语法特性之一. Python中的for.while等循环都有一个可选的else分支(类 ...
- tsql语句中的t是什么_TSQL中的Java HashCode
tsql语句中的t是什么 The Java HashCode method is used to determine uniqueness or similarity of strings. Whil ...
- mysql语句中limt_mysql sql语句中的limit用法
mysql sql语句中的limit用法 1.select * from tablename limit 100,15 从100条记录后开始(不包括第100条记录)取出15条记录 (实际取出的是第 1 ...
- sql语句中的limit用法
sql语句中的limit用法 limit 用于限制查询结果返回. 用法: limit a,b 其中a表示查询数据的起始位置,b表示返回的数量. (MySQL数据库中的记录是从0开始的) 举例: SEL ...
- SQL语句中JOIN的用法
记录:257 写SQL最高境界:SELECT * FROM 表名.当然这是一句自嘲.探究一下SQL语句中JOIN的用法,直到经历这个场景,变得想验证一下究竟. 一.场景 把关系型数据库A中表TEST_ ...
最新文章
- 最全面的homogeneous单应性坐标的定义,以及不同投影,仿射,相似,刚体变换矩阵的关系和自由度分析
- [Life Sciences.AI]专栏介绍及内容分类(持续更新......)
- oracle测试没响应,Oracle JDBC 没响应,是不是BUG?
- 这个为生信学习打造的开源Bash教程真香!!(目录更新)!
- Spring : Spring @Transactional-嵌套事物回滚
- go的转义字符,字符串本身带有特殊符号
- pyjion python3.6_Pyjion的代码质量一例 [20160221]
- Mac OS git多次需要输入用户名密码config解决
- 0基础入门VTD-实操静态道路建模4
- 考证党必备的5个神仙APP,助你日常高效充电
- python调用def函数的格式_Python 函数def 模块调用函数方法及全局变量
- ▶国务院关于延长中秋国庆放假至10天的通知
- 关于微信开发者没有上传按钮的问题
- 苹果安卓APP下载地址合并为一个二维码
- 深度揭密SSD中的原片-白片-黑片:莫贪小便宜
- idea打开多个小窗口换行
- redis出现WRONGTYPE Operation against a key holding the wrong kind of value错误
- 微前端之实现方式和项目分析、实践主子应用启动配置、vue2、vue3、react15、react16 子应用的配置
- 用Annchain,加分
- IE7.0,IE8.0卸载方法,回到IE6.0
热门文章
- Mybatis入门:2(xml形式的增删改查)
- SQL基础学习总结:6(INSERT语句的相关使用方法)
- SQL基础学习总结:5(HAVING子句的使用ORDER BY排序子句的使用)
- c语言中手机系统,一种手机课堂C语言编程系统的制作方法
- oracle非归档模式下如何备份,Oracle之RMAN数据库在非归档模式下的备份和恢复
- 动态刷新_屋盖“起飞”刷新国内记录,中建八局杭州萧山国际机场项目最新动态来袭...
- NLP学习 资料总结
- iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署)
- python unicodedecodeerror utf8_python-pip install和UnicodeDecodeError:’utf-8’编...
- 美妆彩妆宣传PPT模板