首页 新闻 赞助 找找看

oracle如何对数据库中某个字符串剔除一部分后重新存储,用sql实现

0
悬赏园豆:10 [已解决问题] 解决于 2018-12-19 16:59

例如,表a中有字段ID,col

id col
1 9,2,3,4,5,6,7
2 5,6,7,9
3 3,4,9,8
现在的需求是对col中包含9的col进行修改,比如Id=2的5,6,7,9改成5,6,7,id=3的3,4,9改为3,4.单纯使用sql如何实现,第一次在博客园提问,谢谢各位大佬

昨日章鱼的主页 昨日章鱼 | 初学一级 | 园豆:140
提问于:2018-12-13 16:11
< >
分享
最佳答案
0

经过本人自己研究,oracle可以使用REGEXP_REPLACE()正则替换的方法对需要替换的值进行修改,也就是
SELECT id, REGEXP_REPLACE(col,'正则表达式','') FROM a WHERE CV_DISPLAY_FIELDS LIKE '%9%';
当9位于头部时,使用
SELECT id, REGEXP_REPLACE(col,'^(9)[^\d];?','') FROM a WHERE col LIKE '%9%';
当9位于中部时,使用
SELECT id, REGEXP_REPLACE(col,'[^\d](9)[^\d];?' , ',') FROM a WHERE col LIKE '%9%';
当9位于尾部时,使用
SELECT id, REGEXP_REPLACE(col,'[^\d](3)$;?' , ',') FROM a WHERE col LIKE '%9%';
这样子就可以update所以需要更改的项目
ps:oracle不能使用正则表达式的零宽断言与负向零宽断言,不然将正则表达式设置为'(?<[0-9])(0)(?[0-9]);?',一个update就可以解决所以情况了,不过oracle好像不支持。所以只能分三种情况解决

昨日章鱼 | 初学一级 |园豆:140 | 2018-12-14 15:51
其他回答(2)
0

update tablename t set t.col = replace(t.col,'9','')
mysql版本的

收获园豆:4
我亦留此地 | 园豆:125 (初学一级) | 2018-12-14 11:37
0

别想复杂了,就是替换操作。一楼的replace是方法之一。

收获园豆:6
一禅·小和尚 | 园豆:519 (小虾三级) | 2018-12-14 14:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册