SQL查询中的特殊字符处理
我们都知道SQL查询过程中,单引号“'”是特殊字符,所以在查询的时候要转换成双单引号“''”。
但这只是特殊字符的一个,在实际项目中,发现对于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操作,需要进行以下替换(注意顺序也很重要)
[ -> [[] (这个必须是第一个替换的!!)
% -> [%] (这里%是指希望匹配的字符本身包括的%而不是专门用于匹配的通配符)
_ -> [_]
^ -> [^]
注意:
在Oracle9i中,经过实际测试发现,需要处理的特殊字符有:
_(下划线)
%(百分号)
‘(单引号)
&(这个在Oracle中与后面的字符组成变量)
上面其他字符不需要处理。
对于前三种,需要使用ESCAPE进行转义,对于’&‘符号比较特殊,需要将’xxx&xxx'转化为'xxx&' || 'xxx'的形式,或者用chr(38)表示’&‘
转义符最好使用‘、‘(反斜线)。
使用’@‘,在全角字符过长时会发生错误,原因目前不明。
数据库sql的特殊字符:
1)单引号’:例如string a = “this is marry’s book.”;
使用insert时就会出错。
解决:a= a.Replace("'","''");
2)百分号% :例如string a = “50%”;
使用like查询,查出带有50%的所有记录,则会被认为是通配符。
解决:Select * FROM tbl where name LIKE '%/%%' ESCAPE '/'
即a=a.Replace("%","/%%")
或者[%]
3)下划线_ :例如 string a = “m_n”;
使用like查询,select * from tbl where name like ‘%m_n%’,下划线被认为是通配符。
解决:[_]
4)方括号[]:主要是左括号:[[]
5)尖括号^:[^]