使用逗号分隔值 - SQL从字段中删除多个值

时间:2014-07-31 15:48:10

标签: sql oracle

我必须对特定字段(Oracle DB)进行一些更改

我想知道用逗号分隔值(字符串)从字段中删除多个值的最佳方法是什么? 例: 之前:TYP,CRT,REW,PBR,ORT 删除TYP,CRT和ORT 之后:REW,PBR

使用嵌套的REPLACE是唯一的选择吗?

1 个答案:

答案 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

最后,弗兰克施密特上面的评论是现实的 - 在列中这样的逗号分隔列表通常意味着糟糕的设计。如果您可以将这些值拆分为相关的详细信息表,那么您可能会让事情变得更加轻松。