SQL语句处理特殊字符的例子

用户输入如果没有任何限制的话,则必须对特殊字符进行变换。如果对单引号不进行变换,则会发生数据库错误,甚至可能导致系统崩溃。不过回避方法却非常简单,只要将单引号[']转换成两个单引号['']就可以了。 例:SELECT * FROM TBL WHERE COL = 'ABC''DEF'; 模糊查询的语句虽然不会发生SQL错误,但是不进行回避的话,则无法得到要检索的值。回避方法较单引号复杂。需要使用转义符。将[%]转为[/%]、[_]转为[/_], 然后再加上[ESCAPE '/']就可以了。 例:SELECT * FROM TBL WHERE COL LIKE 'ABC/%/_%' ESCAPE '/';   ※最后一个%是通配符。 如果做日文项目的话,会出现全角字符的[%]、[_], 而这两个全角字符同样会作为半角通配符处理。所以在变换时,同时需要将全角的[%]、[_]进行变换。 例:SELECT * FROM TBL WHERE COL LIKE 'ABC/%/_/%/_%' ESCAPE '/'; 变换成这样似乎结束了,可是不要忘了还有转义符自身,万一用户输入转义符的话, 以上的处理就会发生SQL错误。所以也必须对转义符进行变换。变换方法就是将[/]转换为[//]。 例:SELECT * FROM TBL WHERE COL LIKE 'ABC/%/_/%///_%' ESCAPE '/'; 以上的操作都针对于一般的数据类型,如CHAR、VARCHAR2。 如果出现NCHAR、NVARCHAR2的话,以上的处理就会出现ORA-01425错误。 如果改成以下写法,则会发生ORA-01424错误。 SELECT * FROM TBL WHERE COL LIKE '%/_%' ESCAPE TO_NCHAR('/') 正确的写法应该是 SELECT * FROM TBL WHERE COL LIKEC '%/_%' ESCAPE TO_NCHAR('/') 最后要说明的是每个like都应该写ESCAPE语句。 例: SELECT * FROM TBL WHERE COL1 LIKE '%/_%' ESCAPE '/' OR COL2 LIKE '%/_%' ESCAPE '/' CREATE TABLE #TEMP (Charcater varchar(50)) insert into #TEMP values ('werwerweerwe[werwe]werwerwer') insert into #TEMP values ('werwerweerwe[zzzzzzzzzz') insert into #TEMP values ('werwerweerwe]zzzzzzzzzz') select * from #TEMP where Charcater like '%]%' select * from #TEMP where Charcater like '%[[]%' 如果查询‘[’的则like后应些成[[],而’]‘,则直接写成] 文章源自:烈火网,原文:http://www.liehuo.net/a/200909/279254.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值