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

2019-01-02 20:27发布

例如,表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如何实现,第一次在博客园提问,谢谢各位大佬

标签: oracle sql
3条回答
查无此人
2楼-- · 2019-01-02 20:46

经过本人自己研究,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好像不支持。所以只能分三种情况解决

查看更多
与风俱净
3楼-- · 2019-01-02 20:50

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

查看更多
明月照影归
4楼-- · 2019-01-02 20:59

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

查看更多
登录 后发表回答