SQL语句中&、单引号等特殊符号的处理
今天遇到一个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;”的方法来解决,不过我试了一下,并没有成功。
案例:
create view bnm as
select ROW_NUMBER() OVER (ORDER BY tf_CategoryName desc) XuHao,tf_CategoryName tf_Name,sum(Tr_Count) Tr_Count from tb_FaultCategory a
left join
(select TR_ELECTRICALCATEGORYID ,COUNT(*) Tr_Count from TB_REPAIRSBASEINFO a1
where tr_RepareResult!='' group by TR_ELECTRICALCATEGORYID) b on a.fid=b.TR_ELECTRICALCATEGORYID group by tf_CategoryName go
declare @s varchar()
select @s=ISNULL(@s+',','')+''''+tf_Name+'''=sum(case when tf_Name='''+tf_Name+''' then Tr_Count else 0 end)'
+ ',cast(sum( case when tf_Name='''+tf_Name+''' then Tr_Count else 0 end)*100/sum(Tr_Count) as varchar(20))+''%'' as ''' +'报修率'''
from bnm group by tf_Name
print @s
exec('select '+@s +' from bnm')
SQL语句中&、单引号等特殊符号的处理的更多相关文章
- sql语句中包含引号处理方法
		
1. 背景 在使用Python脚本向数据库导入日志文件时候,突然报错. 2. 解决思路 查看messages文件,发现有一条语句里包含单引号. 查看sql语句,是使用单引号标注str类型. 3. 得出 ...
 - SQL语句中的单引号处理以及模糊查询
		
为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在C#中使用Sql ...
 - sql语句中的注释符号
		
sql语句中的注释符号 mysql # 到该行结束.-- 到该行结束 以及 的注释方格:mysql> SELECT 1+1; # 这个注释直到该行结束mysql> SELE ...
 - SQL 关于有单引号数据更新的问题
		
要把sql语句中包含有单引号的符号加入到数据库中的做法 )),''','123.com') 很简单就是加入id=''123'' 0'0就可以写成'0''0'
 - MyBatis Sql语句中的转义字符
		
1.在xml的sql语句中,不能直接用大于号.小于号要用转义字符 如果用小于号会报错误如下: org.apache.ibatis.builder.BuilderException: Error cre ...
 - 在sql语句中添加php变量
		
在sql语句中使用{}将php变量扩起来,php就会解析{}中的内容. //案件统计 function getCount($dsql,$tableName,$year){ //诉讼案件总数,总金额 $ ...
 - (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
		
总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中 ...
 - 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
		
总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 日期:2005年6月1日 作者:seasky212 总结一下SQL语句中引号(').quoted ...
 - (转)SQL语句中的N'xxxx'是什么意思
		
SQL语句中的N'xxxx'是什么意思 我们在一些sql存储过程,触发器等中经常会见到类似 N'xxxx' 是什么意思? 例如:if exists (select * from dbo.sysobje ...
 - (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
		
总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法以及SQL语句中日期格式的表示(#).('')在Delphi中进行字符变量连接相加时单引号用('' ...
 
随机推荐
- IOS第一天多线程-04GCD通信
			
**** #define HMGlobalQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) #define HMM ...
 - IOS第16天(2,Quartz2D下载进度条)
			
*************自定义下载的view的方法 #import "HMProgressView.h" @interface HMProgressView() @propert ...
 - Transform a BST to greater sum tree
			
Given a BST, transform it into greater sum tree where each node contains sum of all nodes greater th ...
 - 【iCore3 双核心板_FPGA】例程十三:FSMC总线通信实验——复用地址模式
			
实验指导书及代码包下载: http://pan.baidu.com/s/1nuYpI8x iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
 - 【微信开发】 新浪SAE开发平台 注意事项
			
1. 微信开发 新浪SAE开发平台 验证Token 一直失败? 这个问题困扰了一个又一个的微信学习者,现在百度到的答案有:在echo $echoStr;之前添加header('content-type ...
 - UIView添加手势
			
_shareImage.userInteractionEnabled=YES; UITapGestureRecognizer *imagegesture=[[UITapGestureRecognize ...
 - 修改FreeBSD启动菜单停留时间
			
原文:http://blog.chinaunix.net/uid-21782158-id-11006.html 分类: 两种情况: 一.启动时出现菜单的时候要停的10秒 方法: 编辑/boot/loa ...
 - 使用Notepad++代替笨拙的Arduino IDE
			
Arduino自带的IDE 太不好用了,下面是用强大,轻量级,免费,开源,丰富插件的的Notepad++编辑器来打造Arduino开发环境 . 配置过程对新生来说可能有些繁琐,但是我尽力写的很详细了, ...
 - c#中浅拷贝和深拷贝的理解
			
c#中拷贝有浅拷贝和深拷贝之分. 例如对象A,其中有值类型字段和引用类型字段: 1.浅拷贝: 对于值类型字段,直接逐位复制到新拷贝的副本对象中,修改副本的字段的值,不会影响源对象中字段的值: 对于引用 ...
 - 图割Graph-Cut的最大流实现
			
利用最大流标号法求解最大流,详见代码: Version:未加头尾节点版: 缺点:havn't take nodes' pixels into consideration /************** ...