Sql Like 通配符 模糊查询技巧及特殊字符

1. SQL like对时间查询的处理方法

SQL数据表中有savetime(smalldatetime类型)字段,表中有两条记录,savetime值为:2005-3-8 12:12:00和2005-6-6 14:02:02

我用下面语句什么也搜不出来

select * from soft where soft.savetime
like‘%2005-3-8%‘

SQL帮助中说:

"当搜索 datetime 值时,推荐使用 LIKE,因为 datetime 项可能包含各种日期部分。例如,如果将值 19981231 9:20 插入到名为
arrival_time 的列中,则子句 WHERE arrival_time = 9:20 将无法找到
9:20 字符串的精确匹配,因为 SQL Server 将其转换为 1900 年
1 月 1 日上午 9:20。然而,子句 WHERE arrival_time
LIKE ‘%9:20%‘ 将找到匹配。"

后运行下面语句SELECT soft.*,
CAST(soft.savetime AS varchar(20)) AS strdatetime, 发现SQL把smalldatetime格试转成:03
8 2005 12:12PM

我何用 like‘%2005-3-8%‘搜索到2005年3月8日所有的记录?

select * from soft where
datediff(d,soft.savetime,convert(datetime,‘20050308‘,121))=0

----

select * from soft where convert(char(10),soft.savetime,121)=‘20050308‘

2. SQLlike 操作中的特殊字符处理方法:

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%

在实际进行处理的时候,对于=操作,我们一般只需要如此替换:

‘ -> ‘‘

对于like操作,需要进行以下替换(注意顺序也很重要)

[ ->
[[]     (这个必须是第一个替换的!!)

% ->
[%]    (这里%是指希望匹配的字符本身包括的%而不是专门用于匹配的通配符)

_ -> [_]

^ -> [^]

3SQL 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‘

意思就是:

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

3.create   table   a   (name  
varchar(10))

go

insert   into   a  
select   ‘11%22‘

union   all   select  
‘11%33‘

union   all   select  
‘12%33‘

go

select   *   from  
a     WHERE   name   LIKE  
‘%/%33‘   ESCAPE   ‘/‘   --指定用‘/‘符号来说明跟在其后面的通配符字符为普能字符。(第二个%是字符不是通配符来的)

go

drop   table   a

结果为:

name

----------

11%33

12%33

 总结:

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

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 ‘/‘

时间: 2024-10-23 01:45:23

Sql Like 通配符 模糊查询技巧及特殊字符的相关文章

在JDBC中实现SQL语句的模糊查询

在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * from table where tableid like %id%; JDBC中的sql语句: String sql = "select * from table where tableid like \"%\"?\"%\"";//?为占位符 原文

SQL中常用模糊查询的四种匹配模式

执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(%%)表示.比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为"张三","张猫三"."三脚猫","唐三藏&

SQL中常用模糊查询的四种匹配模式&&正则表达式

执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(%%)表示.比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来.另外,如果须要找出u_name中

SQL 怎么实现模糊查询?

执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件; 其中,关于条件,SQL提供了四种匹配模式: 一.%:表示零个或多个字符. 可以匹配任意类型和任意长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. select * from flow_user where username like '%王%'; 将会把flow_user这张表里面,列名username中含有"王"的记录全部查询出来

SQL like使用 模糊查询

模糊查询: 参考资料:http://www.w3school.com.cn/sql/sql_wildcards.asp 在搜索数据库中的数据时,您能够使用 SQL 通配符. SQL 通配符  Like 在搜索数据库中的数据时,SQL 通配符能够替代一个或多个字符. SQL 通配符必须与 LIKE 运算符一起使用. 在 SQL 中,可使用下面通配符: 通配符 描写叙述 % 替代一个或多个字符 _ 仅替代一个字符 [charlist] 字符列中的不论什么单一字符 [^charlist] 或者 [!c

SQL SERVER 的模糊查询 LIKE

今天写个动态脚本,需要把数据库里面包含“USER_"的表删除掉,突然想不起来如何搜索通配字符了,赶紧查查MSDN,整理了下模糊查询的知识点,留着以后查阅用. LIKE模糊查询的通配符 通配符 说明 示例 % 包含零个或多个字符的任意字符串. WHERE title LIKE '%computer%' 将查找在书名中任意位置包含单词 "computer" 的所有书名. _(下划线) 任何单个字符. WHERE au_fname LIKE '_ean' 将查找以 ean结尾的所有

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简单概述一下本讲 别名,sql片段简单写一下,模糊查询多写一点 一.别名 <typeAliases> <!--第一种--> <!--<typeAlias type="cn.dawn.demo01.entity.Book" alias="book"></typeAlias>--> <!--第二种--> <

geoserver配置SQL图层 cql_filter模糊查询

1.新建图层,选择对应的 数据源 2创建SQL源图层 3.写好SQL,刷新,需要注意设置主键为标识符,设置空间数据为Geometory 4326 4.数据过滤访问地址,支持cql_filter 模糊查询 http://hhzc.hubeiwater.gov.cn/geoserver//ows?service=WFS&version=1.0.0&request=GetFeature&maxFeatures=500000&outputFormat=application%2Fj

sql语句的模糊查询复习及小技巧一个

一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚猫","唐三藏"等等有"三&qu