例如,表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如何实现,第一次在博客园提问,谢谢各位大佬
相关问题
- SQL join to get the cartesian product of 2 columns
- sql execution latency when assign to a variable
- Difference between Types.INTEGER and Types.NULL in
- php PDO::FETCH_ASSOC doesnt detect select after ba
- Bulk update SQL Server C#
经过本人自己研究,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好像不支持。所以只能分三种情况解决
别想复杂了,就是替换操作。一楼的replace是方法之一。
update tablename t set t.col = replace(t.col,'9','')
mysql版本的