我必须对特定字段(Oracle DB)进行一些更改
我想知道用逗号分隔值(字符串)从字段中删除多个值的最佳方法是什么? 例: 之前:TYP,CRT,REW,PBR,ORT 删除TYP,CRT和ORT 之后:REW,PBR
使用嵌套的REPLACE是唯一的选择吗?
答案 0 :(得分:1)
您可以使用REGEXP_REPLACE
:
UPDATE myTable
SET myColumn =
TRIM(TRAILING ',' FROM REGEXP_REPLACE(myColumn, '(TYP|CRT|ORT)(,|$)'))
正则表达式查找TYP,CRT或ORT,后跟逗号或字符串的结尾。如果它获得最后一个值(例如ORT
中的REW,ORT
),它将留下一个尾随逗号。此示例不是使正则表达式过度复杂化,而是使用TRIM()函数删除任何尾随逗号。
有一个SQLFiddle here。
最后,弗兰克施密特上面的评论是现实的 - 在列中这样的逗号分隔列表通常意味着糟糕的设计。如果您可以将这些值拆分为相关的详细信息表,那么您可能会让事情变得更加轻松。