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

以逗号分隔的字符串替换有关问题

更新时间: 2014-01-05 02:12:40 责任编辑: Author_N1

 

以逗号分隔的字符串替换问题
id    route
 1   '123,236,569'
 2   '123'
 3   '1234,569'
如字段route  ‘123,236,569’ 以逗号间隔 也可能是单个 '123'
现要替换其中的‘123’为'321' ,
如'123,236,569'替换为成 '321,236,569'  '123'替换成'321',
但要避免一种情况 '1235,236,569' 不能替换成 '3215,236,569'
如id 1和2 符合条件

有什么简便的方法,最好不要先将字段route转换成多行,要替换的记录有很多条



--参考方法--
估计要正则,可惜我不是很擅长正则
--参考方法--
oracle有个函数可以实现反转,楼主可能需要先进行一些处理后,获得需要进行转换的字符,然后用reverse函数就可以了

select reverse('123') col from dual

col
------------
321
--参考方法--
CREATE TABLE STUDY(
 ID INT PRIMARY KEY,
ROUTE VARCHAR2(255)
);
INSERT INTO STUDY(ID,ROUTE) VALUES(1,'123,236,569');
INSERT INTO STUDY(ID,ROUTE) VALUES(2,'123');
INSERT INTO STUDY(ID,ROUTE) VALUES(3,'1234,569');

SELECT ID,
reverse(SUBSTR(route,0,case when INSTR(route, ',')=0 then LENGTH(route) else INSTR(route, ',')-1 end)) 
FROM STUDY

--参考方法--
楼主的这个问题太麻烦了,一直关注中,可到现在没有一个是正确的啊


--参考方法--
持续关注
果然现实需求都是很麻烦的
--参考方法--
我的想法是这样的,你要先考虑到乱码的种类,先把乱码清除掉,比如把1234替换为*。然后用replace函数把123替换为321,然后把*替换为1234。
--参考方法--
select TRANSLATE('123,236,569','123','321') from dual 

TRANSLATE(string,from_str,to_str)
返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。
--参考方法--
只判断和替换第一个逗号前的字符串


with t1 as
(
     select 1 id,'123,12,569' route from dual union all
     select 2 id,'12' route from dual union all
     select 3 id,'1234,12' route from dual  union all
     select 4 id,'12,12,123' route from dual
)

select id,
       case when instr(route,',') = 0 then decode(route,'12','21',route)
       when instr(route,',') > 0 then decode(substr(route,1,instr(route,',')-1),'12','21'
--参考方法--
substr(route,-(length(route)-length('12'))),route) 
       end route
from t1 

     id       route
----------------------------------
1 1 123,12,569
2 2 21
3 3 1234,12
4 4 21,12,123


--参考方法--
WITH t1 AS
  ( SELECT 1 id,'123,236,569' route FROM dual
  UNION ALL
  SELECT 2 id,'123' route FROM dual
  UNION ALL
  SELECT 3 id,'1234,569' route FROM dual
  UNION ALL
  SELECT 4 id,'423,123' FROM dual
  )
SELECT id,SUBSTR(REPLACE(route
--参考方法--
',','123,','321,'),1,LENGTH(route)) FROM t1;
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

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