SQL更新表中的列

时间:2016-02-18 12:04:30

标签: sql sqlite

我有一个包含列值的表,该列可以包含具有单个值或逗号分隔值的行。

例如,

VALUES
 23
 23,43,55
 43,23,55
 43,55,23

我需要用28替换所有出现的23,我该怎么做。

1 个答案:

答案 0 :(得分:2)

将列表存储为字符串是一个非常糟糕的主意。 SQL具有用于存储列表的出色数据结构。它被称为表,而不是字符串。存储列表的正确方法是使用联结表。

有时我们会遇到其他人非常糟糕的设计决策。如果是这样,你可以这样做:

update t
    set col = trim(replace(',' || col || ',', ',23,', ',28,'), ',')
    where ',' || col || ',' like '%,23,%';

注意:

无论" 23"出现在字符串中(包括在开头和结尾)。 这样可以保持字符串的格式,在开头和结尾没有逗号。 这只会尝试更新列表中包含特定元素的行。 在弄清楚如何修复数据结构时,使用这样的查询应该是一个权宜之计。