我有一个包含列值的表,该列可以包含具有单个值或逗号分隔值的行。
例如,
VALUES
23
23,43,55
43,23,55
43,55,23
我需要用28替换所有出现的23,我该怎么做。
答案 0 :(得分:2)
将列表存储为字符串是一个非常糟糕的主意。 SQL具有用于存储列表的出色数据结构。它被称为表,而不是字符串。存储列表的正确方法是使用联结表。
有时我们会遇到其他人非常糟糕的设计决策。如果是这样,你可以这样做:
update t
set col = trim(replace(',' || col || ',', ',23,', ',28,'), ',')
where ',' || col || ',' like '%,23,%';
注意:
无论" 23"出现在字符串中(包括在开头和结尾)。 这样可以保持字符串的格式,在开头和结尾没有逗号。 这只会尝试更新列表中包含特定元素的行。 在弄清楚如何修复数据结构时,使用这样的查询应该是一个权宜之计。