如何使用用户输入值oracle替换表列中的逗号分隔值

时间:2011-05-17 07:45:41

标签: sql oracle


我在oracle中有一个带有逗号分隔值的列的表。我需要的是当用户输入一个值并且该值存在于任何行中时,应将其删除 例如

COL

123234
56,123

如果用户输入123,则第1列应该只有234,第二列应该只有56 我们如何在oracle中做到这一点? 请帮助
感谢

2 个答案:

答案 0 :(得分:3)

delete from yourtable t
where
  instr(','||t.col||',', '123') > 0

如果您愿意,可以用参数替换'123'。

但更好的方法是不存储逗号分隔值,而是创建详细信息表。如果您需要在逗号分隔列表中查找特定值,则不能使用索引以及其他限制。

[编辑] 误解了这个问题。你的意思是:

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • 在值之前和之后添加','以匹配值的开头或结尾处的项目。
  • 使用值',123'替换(在逗号中),以防止意外匹配1234.
  • 使用substr两次删除第一个和最后一个字符(添加的逗号)
  • 在哪里使用instr以防止更新不需要更新的记录(更好的性能)。

答案 1 :(得分:1)

试试这个:

UPDATE t
SET col = REPLACE(REPLACE(col, '&variable', ''), ',', '') FROM t ;