【问题标题】:How to replace a comma separated value in table column with user input value oracle如何用用户输入值oracle替换表列中的逗号分隔值
【发布时间】:2011-05-17 07:45:40
【问题描述】:


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

颜色

123,234
56,123

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

【问题讨论】:

  • 您是否总是每行最多有两个值?顺便说一句,如果您将 SQL 标记添加到您的问题中,我相信它会有所帮助
  • 该列中甚至可能有单个、两个或多个值,不一定是两个。

标签: sql oracle


【解决方案1】:
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 两次删除第一个和最后一个字符(添加的逗号)
  • 在 where 中使用 instr 以防止更新不需要更新的记录(更好的性能)。

【讨论】:

  • 这将删除整个记录 - 他只想从逗号分隔列表中删除指定的值。
【解决方案2】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2021-11-10
    • 2012-04-09
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多