欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

db2 分割字符串有关问题

更新时间: 2014-01-05 02:23:51 责任编辑: Author_N1

 

DB2 分割字符串问题
用DB2 自定义了一个字符串分割函数   
select * from table (fc_splitstr('abcdecdecdecdecde','cdec'));
结果
----------------------------
RES
ab
de
de  实际上结果应该是decde

求高手解答

代码如下
CREATE FUNCTION fc_splitstr
(
 srcsql varchar(8000)  --待分拆的字符串
 ,spt  varchar(100)   --分割符
)
  RETURNS table
  (
   re varchar(800)
   )
F1: BEGIN ATOMIC
/**************************************************************************
*过程名称: 字符串拆分函数
*过程功能: 将字符串根据间隔字符分开
*输入参数: 待分拆的字符串
             分割符
*输出参数: tables
*编 程 人: WDH

*编程时间: 2009-11-08
*修 改 人:
*修改比率:
*修改内容:
***************************************************************************/
return
with n(str, ori, pos) as (
values (srcsql||spt, 1,locate(spt,srcsql||spt))
union all 
select  str,  pos+length(spt), locate(spt, str, pos+length(spt))
from n 
where locate(spt, str,pos+length(spt))>0)
select substr(str, ori, pos-ori) as result from n;
END ;



--参考方法--
参考一下:
with n(str, ori, pos) as (
 values ('AA BB CC DD ', 1, posstr('AA BB CC DD ', ' '))
 union all
 select str, pos+1, locate(' ', str, pos+1)
 from n
 where locate(' ', str, pos+1)>0)
 select str, ori, pos, substr(str, ori, pos-ori) as result from n;

--参考方法--
出现这种结果,一部分是因为你的这个函数这样去递归是不包括完整字符串拆分后的最后一部分的,另一部分是你把srcsql和spt拼在一起去拆分的,你可以列出这个递归每次结果看一下
--参考方法--
假如你将srcsql和spt两个字符串拼在一起是为了将拆分的最后一段字符串加上,可以将cdec替换成别的特殊字符,仔细看下你srcsql
--参考方法--
spt的结果
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:23:51
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/9318/
本文WWW.DOC100.NET DOC100.NET版权所有。