SQL通配符及模式匹配
来源:互联网 发布:python index函数 编辑:程序博客网 时间:2024/06/06 23:02
前提,MS SQL的通配符含义:
3[ ]指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。WHERE au_lname LIKE '[C-P]arsen' 将查找以 arsen 结尾并且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如 Carsen、Larsen、Karsen 等。在范围搜索中,范围包含的字符可能因排序规则的排序规则而异。
4[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始并且其后的字母不为 l 的所有作者的姓氏。
定义测试表:
然后,我们进行逐个分析
1、我们知道,对于字符串,其开始和结束标识符为单引号,如果字符串里面有单引号,我们可以直接使用两个单引号来替代。
形如:空串 '', 单引号 '''', 字符串 'abAB#中国字符串', 包含单引号的串 'abAB#中国''字符串'.
2、'_' 、 '%'和'['
(1) '_'匹配单个字符,例:
select * from EscapePattern where value like '_SQL' --查找四个字符,并且以'SQL'结束的记录
结果为:aSQL 中SQL
其中like语句还可以这样写:
'SQL_' 查找四个字符,并且以'SQL'开始的记录,结果:SQLa SQL中
'SQ_L' 查找四个字符,并且以'SQ'开始,以'L'结束的记录,结果:SQaL SQ中L
'_SQL_' 查找五个字符,中间的三个字符是'SQL',结果:aSQLa 中SQL中
'_SQ_L_' 查找六个字符,第二个、第三个和第五个字符分别为'S'、'Q'和'L'的记录 aSQaLa 中SQ中L中
其中'_'可以任意多个,无限制(当然别超过字符串的显示最大值,肯定会报错)。
(2) '%' 匹配任意多个字符(>=0),使用方法同'_',主要是不限制字符串的个数,例:
select * from EscapePattern where value like '%SQL' -- 查找大于或等于3个字符,并以'SQL'结尾的记录
其中like的其他写法:
'SQL%' 查找大于等于3个字符,并且以'SQL'开始的记录
'SQ%L' 查找大于等于3个字符,并且以'SQ'开始,以'L'结束的记录
'%SQL%' 查找大于等于3个字符,必须包含'SQL'的记录
'%SQ%L%' 查找大于等于3个字符,必须包含'SQ'和'L',并且'SQ'在'L'前面的记录
另外,如果要查询'_'或'%',可以使用'[]'包含起来,如'[_]'和'[%]',这样,利用匹配样式,将其转换为普通字符。
如select * from EscapePattern where value like '%[_]%'结果为:中国_CN,即包含'_'的记录。
(3) '['因为是模式匹配的开始字符,如果是查询此字面,而不是用在模式匹配时,也需要进行处理,使其成为普通字符'[[]':如'['-->'[[]', '[[' --> '[[][[]'
3、在模式匹配(Pattern)中使用的字符:'^'、'-',']',它们本来就包含在'[]'中,在外部,不需要进行处理,同普通字符,但如果在模式匹配里面,则需要引用其方法来进行查询,如果在Like里面,需要引入Escape进行转义:
如:
select * from EscapePattern where value like 'a[/^]%' escape '/' -- 查询以'a^'开始的所有记录。
select * from EscapePattern where value like '%[/]]%' escape '/' -- 查询所有包含']'字符的记录
select * from EscapePattern where value like '%[/-]%' escape '/' -- 查询所有包含'-'字符的记录
这样一切都可以解决问题!
但是,另外一个问题出现了。如果只使用
PATINDEX ( '%pattern%' , expression ),无法使用Escape
如果有如果模式匹配里面使用了'-'、'^'或']',可以这样来做:
(1) 对于'-',可以放在最后或最前面如'[a-z-]'或'[-a]',不在中间充当连接符(如数字[0-9],小写字符[a-z]中的连接符)
(2) 对于'^',由于其只在模式匹配最开始有效,形如'[XX^XX]',所以,只要不放在最开始,什么地方都可以。
(3) 对于']', 可以将其不放在模式匹配里面,也可以将其替换成其他字符,然后再转换回来。
下面是一些比较有用的pattern,如果你知道正则表达式,那么就相当容易理解:
小写字母[a-z] 大写字母[A-Z] 数字[0-9] 汉字[吖-咗]
非小写字母[^a-z] 非大写字母[^A-Z] 非数字[^0-9] 非汉字[^吖-咗]
- SQL通配符及模式匹配
- LeetCode-通配符模式串匹配
- SQL 通配符及替换
- 数据库-SQL里面的通配符匹配
- SQL模糊查询及通配符
- 【SQL】通配符及转义符
- 通配符匹配
- 通配符匹配
- 通配符匹配
- 通配符匹配
- sql字符串模式匹配
- SQL中的模式匹配
- SQL匹配模式
- SQL模式匹配
- Mybatis解决sql中like通配符模糊匹配
- [Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询
- [Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询
- [Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询
- 新的一年新的开始
- SQL Server服务器名称与默认实例名不一致的修复方法
- javascript获取网页高度与宽度
- 自己写的整数和字符串之间的转化
- 用美好的心灵看世界
- SQL通配符及模式匹配
- vc60.pdb” is missing debugging information for referencing module 错误
- SQL Server 2008行数据和页数据压缩解密
- 非关系型数据库“NoSql”之Apache Cassandra
- 一道TCL的笔试题---递归
- Android 应用程序之间数据共享—ContentResolver
- javascript控制div信息居中
- 按钮
- VFW视频采集详细介绍