今天使用搜索功能是:发现 1、商品查询中可以加通配符“%”。例如查找商品"龙饼",输入“%龙”也可以查找
keyword = keyword.replaceAll("%", "\\\\%");
查找后发现SQL中直接用 like '%"+keyword+"%'"; 所以导致用%通配符依然可以匹配
找到两个解决方式
1:使用instr()函数 sql + " and instr(t1.FName, '"+keyword+"')>0";Oacrle和MySQL可以使用
2。 int i=keyword.indexOf("%");
if(i==-1){
sql = sql + " and t1.FName like '%"+keyword+"%'";
}else{
String keyword2=keyword.replace("%", "[%]");
sql = sql + " and t1.FName like '%"+keyword2+"%'";
}
SQL中通配符、转义符与括号的使用 2010-03-16 18:27:42
分类: Oracle
一、搜索通配符字符的说明
可以搜索通配符字符。有两种方法可指定平常用作通配符的字符:
使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:
WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
在上述 LIKE 子句中,前导和结尾百分号 (%) 解释为通配符,而斜杠 (/) 之后的百分号解释为字符 %。
在方括号 ([ ]) 中只包含通配符本身。要搜索破折号 (-) 而不是用它指定搜索范围,请将破折号指定为方括号内的第一个字符:
WHERE ColumnA LIKE '9[-]5'
下表显示了括在方括号内的通配符的用法。
符号 含义
LIKE '5[%]' 5%
LIKE '5%' 5 后跟 0 个或更多字符的字符串
LIKE '[_]n' _n
LIKE '_n' an, in, on (and so on)
LIKE '[a-cdf]' a, b, c, d, or f
LIKE '[-acdf]' -, a, c, d, or f
LIKE '[ [ ]' [
LIKE ']' ]
二、实例说明:
在表PersonalMember中查找strloginname字段中含有"["的记录。
可用三条语句:
1、
select strloginname,* from PersonalMember where strloginname like '%\[%' escape '\'
2、(说明"\"与"/"均可与escape关键字结合作为转义符)
select strloginname,* from PersonalMember where strloginname like '%/[%' escape '/'
3、
select strloginname,* from dbo.PersonalMember where charindex('[',strloginname)>0
C++ 的转义字符是:\
SQL 的转义字符是:'(单引号)
例:select * from tbl where uyear='''06'
请注意其中红色背景的单引号,它即表示转义字符,如果我们省略,则整个语句会出错,转义字符不会输出,上例中 uyear 的实际条件值为 '06,而不是 ''06
为什么不能省略呢,假如我们省略,上句变成:select * from tbl where uyear=''06'
由于在 SQL 中单引号表示字符串的开始和结束符号,于是 SQL 解释器会认为语句中灰色背景的为字符串,其后的语句显然是个错误的语句,当然会报错,为了解决字符串的单引号问题,就出现了转义字符单。
keyword = keyword.replaceAll("%", "\\\\%");
查找后发现SQL中直接用 like '%"+keyword+"%'"; 所以导致用%通配符依然可以匹配
找到两个解决方式
1:使用instr()函数 sql + " and instr(t1.FName, '"+keyword+"')>0";Oacrle和MySQL可以使用
2。 int i=keyword.indexOf("%");
if(i==-1){
sql = sql + " and t1.FName like '%"+keyword+"%'";
}else{
String keyword2=keyword.replace("%", "[%]");
sql = sql + " and t1.FName like '%"+keyword2+"%'";
}
SQL中通配符、转义符与括号的使用 2010-03-16 18:27:42
分类: Oracle
一、搜索通配符字符的说明
可以搜索通配符字符。有两种方法可指定平常用作通配符的字符:
使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:
WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
在上述 LIKE 子句中,前导和结尾百分号 (%) 解释为通配符,而斜杠 (/) 之后的百分号解释为字符 %。
在方括号 ([ ]) 中只包含通配符本身。要搜索破折号 (-) 而不是用它指定搜索范围,请将破折号指定为方括号内的第一个字符:
WHERE ColumnA LIKE '9[-]5'
下表显示了括在方括号内的通配符的用法。
符号 含义
LIKE '5[%]' 5%
LIKE '5%' 5 后跟 0 个或更多字符的字符串
LIKE '[_]n' _n
LIKE '_n' an, in, on (and so on)
LIKE '[a-cdf]' a, b, c, d, or f
LIKE '[-acdf]' -, a, c, d, or f
LIKE '[ [ ]' [
LIKE ']' ]
二、实例说明:
在表PersonalMember中查找strloginname字段中含有"["的记录。
可用三条语句:
1、
select strloginname,* from PersonalMember where strloginname like '%\[%' escape '\'
2、(说明"\"与"/"均可与escape关键字结合作为转义符)
select strloginname,* from PersonalMember where strloginname like '%/[%' escape '/'
3、
select strloginname,* from dbo.PersonalMember where charindex('[',strloginname)>0
C++ 的转义字符是:\
SQL 的转义字符是:'(单引号)
例:select * from tbl where uyear='''06'
请注意其中红色背景的单引号,它即表示转义字符,如果我们省略,则整个语句会出错,转义字符不会输出,上例中 uyear 的实际条件值为 '06,而不是 ''06
为什么不能省略呢,假如我们省略,上句变成:select * from tbl where uyear=''06'
由于在 SQL 中单引号表示字符串的开始和结束符号,于是 SQL 解释器会认为语句中灰色背景的为字符串,其后的语句显然是个错误的语句,当然会报错,为了解决字符串的单引号问题,就出现了转义字符单。