免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1726 | 回复: 0
打印 上一主题 下一主题

SQL语句中&、单引号等特殊符号的处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:54 |只看该作者 |倒序浏览
今天遇到一个insert语句,在SQL Tools(链接Oracle数据库)插入的某列值为“Computer Hardware & Software>>CPU",这样执行会有问题,因为"&"是一个特殊符号。 符号(&) 在Oracle里有特殊含义,是一个宏变量标识符;在Oracle中,& 是从需要外部输入输入的变量。PS:MySqL中可以直接用"P&G"这样的字符串,故不存在本文所说的问题。要想插入带有&符号的列, 需要用如下的方法(当然,用PL/SQL Developer的for update语句也是可的,但我一般不用此工具)。

如下SQL语句就不能正确运行:
select 'Alibaba&Taobao' from dual;
处理方法:
用Oracle的字符串处理函数chr处理。chr(38)表示 &符号
如:select chr(38) from dual;
结果:&
select 'Alibaba'||chr(38)||'Taobao' from dual;
结果:Alibaba&Taobao
其他不能处理的特殊符合,也用类似的方式处理。如果不知道该特殊符号的ascii值,可以调用ascii函数处理,
如:select ascii('&') from dual;
结果:38

再附一个单引号(')的例子(I'm OK):
1.     SELECT 'I' || '''m OK' from dual;
2.     SELECT 'I''m OK' from dual;
3.     SELECT 'I'||Chr(39)||'m OK' FROM dual;
1、2两个都是转义字符(只是用不用连接符||的区别),第3中是一个字符替换。
PS:我用字符替换来弄and符号(&)就没有成功了。

当然,也看到网上有人提出了“Set define OFF;”和“Select 'Tom' || '&' || 'Jerry' from dual;”的方法来解决,不过我试了一下,并没有成功。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP