sql like里的like 有其他的方法替换吗

&&&&&&&&&&&&&&&&&&
posts - 1263,comments - 455,trackbacks - 24
1,SQL like对时间查询的处理方法
SQL数据表中有savetime(smalldatetime类型)字段,表中有两条记录,savetime值为: 12:12:00和 14:02:02 我用下面语句什么也搜不出来 select * from soft where soft.savetime like'%%' SQL帮助中说: "当搜索 datetime 值时,推荐使用 LIKE,因为 datetime 项可能包含各种日期部分。例如,如果将值 :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 PM 我何用 like'%%'搜索到日所有的记录?
select * from soft where datediff(d,soft.savetime,convert(datetime,'1))=0 ---- select * from soft where convert(char(10),soft.savetime,121)=''
2, 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%
在实际进行处理的时候,对于=操作,我们一般只需要如此替换:
对于like操作,需要进行以下替换(注意顺序也很重要)
[ -& [[]&&&& (这个必须是第一个替换的!!)
% -& [%]&&& (这里%是指希望匹配的字符本身包括的%而不是专门用于匹配的通配符)
3,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'表示特殊用法标志 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 '\'
阅读(...) 评论()2011年8月 挨踢职涯大版内专家分月排行榜第一2011年3月 扩充话题大版内专家分月排行榜第一2011年2月 扩充话题大版内专家分月排行榜第一2011年2月 挨踢职涯大版内专家分月排行榜第一2011年1月 扩充话题大版内专家分月排行榜第一2010年12月 扩充话题大版内专家分月排行榜第一2010年12月 挨踢职涯大版内专家分月排行榜第一2010年8月 挨踢职涯大版内专家分月排行榜第一
2012年9月 扩充话题大版内专家分月排行榜第二2011年11月 扩充话题大版内专家分月排行榜第二2011年10月 扩充话题大版内专家分月排行榜第二2011年9月 挨踢职涯大版内专家分月排行榜第二2011年7月 挨踢职涯大版内专家分月排行榜第二2011年4月 挨踢职涯大版内专家分月排行榜第二2010年6月 挨踢职涯大版内专家分月排行榜第二
2011年8月 挨踢职涯大版内专家分月排行榜第一2011年3月 扩充话题大版内专家分月排行榜第一2011年2月 扩充话题大版内专家分月排行榜第一2011年2月 挨踢职涯大版内专家分月排行榜第一2011年1月 扩充话题大版内专家分月排行榜第一2010年12月 扩充话题大版内专家分月排行榜第一2010年12月 挨踢职涯大版内专家分月排行榜第一2010年8月 挨踢职涯大版内专家分月排行榜第一
2012年9月 扩充话题大版内专家分月排行榜第二2011年11月 扩充话题大版内专家分月排行榜第二2011年10月 扩充话题大版内专家分月排行榜第二2011年9月 挨踢职涯大版内专家分月排行榜第二2011年7月 挨踢职涯大版内专家分月排行榜第二2011年4月 挨踢职涯大版内专家分月排行榜第二2010年6月 挨踢职涯大版内专家分月排行榜第二
2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号
2012年7月 MS-SQL Server大版内专家分月排行榜第一2012年6月 MS-SQL Server大版内专家分月排行榜第一2012年5月 MS-SQL Server大版内专家分月排行榜第一2012年4月 MS-SQL Server大版内专家分月排行榜第一
2008年 总版技术专家分年内排行榜第二
2010年 总版技术专家分年内排行榜第四2009年 总版技术专家分年内排行榜第五2007年 总版技术专家分年内排行榜第六
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 sql like 多个 的文章

 

随机推荐