oracle 根据逗号分割',,,,|,,,,'分别取出第一个逗号之间的字符

Oracle中如何插入特殊字符:&和'(多种解决方案)
Oracle中如何插入特殊字符:& 和 ' (多种解决方案) 今天在导入一批数据到Oracle时,碰到了一个问题:Toad提示要给一个自定义变量AMP赋值,一开始我很纳闷,数据是一系列的Insert语句,怎么会有自定义变量呢?后来搜索了一下关键字AMP发现,原来是因为在插入数据中有一个字段的内容如下:
.hk/3DX?uid=0676&sid=rt_060908
Oracle把这里的URL的参数连接符&当成是一个自定义变量了,所以要求我给变量AMP赋值。怎么办呢?方法有三:
&方法一:在要插入的SQL语句前加上S与原SQL语句一起批量执行
我们在SQL*PLUS下执行 SQL& show all命令时,可以发现一个参数:define &&& (hex 26),如下图所示
concat &.& (hex 2e)
copycommit 0
copytypecheck ON
define &&& (hex 26)
describe DEPTH 1 LINENUM OFF INDENT OFF
这个是Oracle里面用来识别自定义变量的设置,现在我们在SQL*PLUS下将其关闭:
SQL& Set define OFF;
然后再次执行导入脚本,OK!问题搞定。
注意:如果是在TOAD中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。
如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。插入一条语句: SQL& insert into AA (O,resvalue) values ('AA', 'S'||chr(38)||'P');
&方法二:在SQL语句中将'&'替换成chr(38),因为chr(38)是&&&的ASCII码
SQL& Select 'Tom' || chr(38) || 'Jerry'
&方法三:分拆原来的字符串
SQL& Select 'Tom' || '&' || 'Jerry'
我们可以看到,方法一最为简便,而且效率也最高。方法二因为有一个调用函数的过程,所以性能稍差。方法三需要两次连接字符串,效率最差!
那么如果字段的内容中包含了单引号要怎么插入呢?例如:It's fine。方法同样有三
&方法一:使用转义字符
SQL & Select 'test' || ''''
注意:这里的''''四个单引号是什么意思呢?首先第一个和最后一个都是Oracle中的字符串连接符,这个没有异议。那么第二个'和第三'又表示什么意思呢?第二个'是一个转义字符
第三个'才是我们真正的内容
&方法二:同样是使用转义字符,只不过方式不同而已
SQL & Select 'test '''
注意:这里的第二个,第三个'就是我们上面方法一中提到的转义符和真正的内容
&方法三:在SQL中将'替换成chr(39),因为chr(39)是'的ASCII码
SQL & Select 'It' || chr(39) || 'fine'今天看啥 热点:
最近在一项目修改中,要在存储过程中给in参数传值,语句写的也对,但怎么执行都得不出结果,如果把这语句直接赋值、执行,却能得出结果,很是奇怪,如:
直接执行select schoolname from school_info where code in('01','02'),是可以得出结果的,但在存储过程中,使用
declare @area varchar(120);
set @area='01'+','+'02';
select schoolname from school_info where code in(@area),却得不出去结果。&&
想着可能是@area赋值的写法有问题,但试过多种办法都不行。尝试着用组成动态sql语句, 用exec执行的方法,是没有问题,能得出结果的,但总感觉这样有点怪怪的,不是想要的理想中解决办法。
后来终于在网上找一个解决办法,测试后,没有问题,用着很方便。就是建一个函数,建好后,列在函数的表值函数下面,语句如下:
<span create&&&<span function&&&<span [<span dbo<span ].<span [<span f_split<span ](<span @c&&&<span varchar(<span 2000),<span @split&&&<span varchar(<span 2))&&&
<span returns&&&<span @t&&&<span table(col&&&<span varchar(<span 20))&&&
<span as&&&
&&&&<span begin&&&&&
&&&&&&<span while(<span charindex(<span @split,<span @c)<span &&<span 0)&&&
&&&&&&&&<span begin&&&
&&&&&&&&&&<span insert&&&<span @t(col)&&&<span values&&&(<span substring(<span @c,<span 1,<span charindex(<span @split,<span @c)<span -<span 1))&&&
&&&&&&&&&&<span set&&&<span @c&&&<span =&&&<span stuff(<span @c,<span 1,<span charindex(<span @split,<span @c),<span '')&&&
&&&&&&&&<span end&&&
&&&&&&<span insert&&&<span @t(col)&&&<span values&&&(<span @c)&&&
&&&&&&<span return&&&
&&&&<span end
然后使用的时候呢,语句如下:
select schoolname& from school_info where code in(select col from [dbo].[f_split](@area,','))
这样再执行存储过程,给in传入带逗号值的参数,都能正确得出结果了。
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Sql Server最近更新2016年1月 Oracle大版内专家分月排行榜第一2015年6月 Oracle大版内专家分月排行榜第一2015年4月 Oracle大版内专家分月排行榜第一2015年3月 Oracle大版内专家分月排行榜第一2015年2月 Oracle大版内专家分月排行榜第一2014年6月 Oracle大版内专家分月排行榜第一2009年11月 Oracle大版内专家分月排行榜第一2009年10月 Oracle大版内专家分月排行榜第一
2015年9月 Oracle大版内专家分月排行榜第二2015年7月 Oracle大版内专家分月排行榜第二2015年1月 Oracle大版内专家分月排行榜第二2014年12月 Oracle大版内专家分月排行榜第二2014年11月 Oracle大版内专家分月排行榜第二2014年8月 Oracle大版内专家分月排行榜第二2014年7月 Oracle大版内专家分月排行榜第二2014年5月 Oracle大版内专家分月排行榜第二2010年1月 Oracle大版内专家分月排行榜第二2009年9月 Oracle大版内专家分月排行榜第二
2017年6月 Oracle大版内专家分月排行榜第三2017年3月 Oracle大版内专家分月排行榜第三2006年12月 Oracle大版内专家分月排行榜第三
2016年1月 Oracle大版内专家分月排行榜第一2015年6月 Oracle大版内专家分月排行榜第一2015年4月 Oracle大版内专家分月排行榜第一2015年3月 Oracle大版内专家分月排行榜第一2015年2月 Oracle大版内专家分月排行榜第一2014年6月 Oracle大版内专家分月排行榜第一2009年11月 Oracle大版内专家分月排行榜第一2009年10月 Oracle大版内专家分月排行榜第一
2015年9月 Oracle大版内专家分月排行榜第二2015年7月 Oracle大版内专家分月排行榜第二2015年1月 Oracle大版内专家分月排行榜第二2014年12月 Oracle大版内专家分月排行榜第二2014年11月 Oracle大版内专家分月排行榜第二2014年8月 Oracle大版内专家分月排行榜第二2014年7月 Oracle大版内专家分月排行榜第二2014年5月 Oracle大版内专家分月排行榜第二2010年1月 Oracle大版内专家分月排行榜第二2009年9月 Oracle大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 oracle 字段逗号分割 的文章

 

随机推荐