sql之模糊查询

sql模糊查询:普通字符查询、特殊字符查询

模糊查询的一般格式:

SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件;

1、%:表示零个或多个字符。

例如:select * from flow_user where username like ‘%王%’;
将会把flow_user这张表里面,列名username中还有“王”的记录全部查询出来。

2、_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度:

例如:select * from flow_user where username like ‘‘;
只能找到“王英琨”这样username为三个字且中间一个字是“英”的内容。

3、[]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配的对象为他们中的任一个

例如:select * from flow_user where username LIKE’[王李张]飞’;
将找出“王飞”“李飞”“张飞”(而不是“张王李飞”)。
如[]内有一系列字符(01234,abcde之类的)则可略写为“0-4”,“a-e”:
select * from flow_user where username like ‘老[0-9]’;
将找出“老1”、“老2”、……、“老9”

4、[^]:表示不在括号所列之内的单个字符。其取值 和 [] 相同,但它所要求匹配对象为指定字符以外的任一个字符。

select * from flow_user where username LIKE’[^王李张]飞’;
将找出不是“王飞”“李飞”“张飞“的”赵飞“、”吴飞“等。

下面讲解包含特殊字符的模糊查询:
1 . SQL对like 操作中的特殊字符处理方法:

SQL Server查询过程中,单引号 ' 是特殊字符,所以在查询的时候要转换成双单引号 '' 。

在like操作还有以下特殊字符:下划线_,百分号%,方括号[],尖号^。

其用途如下:

下划线:用于代替一个任意字符(相当于正则表达式中的 ? )

百分号:用于代替任意数目的任意字符(相当于正则表达式中的 * )

方括号:用于转义(事实上只有左方括号用于转义,右方括号使用最近优先原则匹配最近的左方括号)

尖号:用于排除一些字符进行匹配(这个与正则表达式中的一样)

以下是一些匹配的举例,需要说明的是,只有like操作才有这些特殊字符,
=操作是没有的。

a_b...        a[_]b%

a%b...       a[%]b%

a[b...       a[[]b%

a]b...       a]b%

a[]b...      a[[]]b%

a[^]b...     a[[][^]]b%

a[^^]b...    a[[][^][^]]b%

2,SQL Like 通配符特殊用法:Escape

阐述Escape 的作用:

1.使用   ESCAPE   关键字定义转义符。在模式中,当转义符置于通配符之前时,
该通配符就解释为普通字符。
例如,要搜索在任意位置包含字符串   5%   的字符串,请使用:    
WHERE   ColumnA   LIKE   '%5/%%'   ESCAPE   '/' 
但是在mysql中好像不能使用"\"。
2.ESCAPE   'escape_character'    
允许在字符串中搜索通配符而不是将其作为通配符使用。
escape_character   是放在通配符前表示此特殊用途的字符。 

SELECT   * 
FROM   finances 
WHERE   description   LIKE   'gs_'   ESCAPE   'S' 
GO 

意思就是: 
比如,我们要搜索一个字符串     "g_"     ,
如果直接     like     "g_",那么   "_"的作用就是通配符,而不是字符,
结果,我们会查到比如     "ga","gb","gc",而不是我们需要的   "g_". 
用     LIKE   'gs_'   ESCAPE   'S'     's'表示特殊用法标志 

参考:http://new-restart.iteye.com/blog/1416765
https://blog.csdn.net/qq_26222859/article/details/51582971

阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭