关于mysql:使用特定逗号分隔值更新列

Update the column with Specific Comma Separated Value

本问题已经有最佳答案,请猛点这里访问。

我创建了一个以逗号分隔形式存储值的表。
是否有任何机制可以达到以下效果?

我在表中有一个名为qty的列,它以下列格式存储该值:

1
Initially Column Contain:-  1,5,8,9,7,10,5

现在我想更新第三个值,即8乘2

1
So Final Answer that Column contain is:-  1,5,2,9,7,10,5


您可以使用字符串替换,因为它知道这不是一个格式良好的规范化数据库。

您的数据库应遵循标准规范化模式,以便在性能,可用性和维护性能更好的表之间获得稳固的关系。你的桌子甚至不是1NF。

虽然现在这个查询有帮助,但考虑改变你的结构。

1
2
3
   update TBL
       set column = replace(column , '8', '2')
     where your_condition

检查此链接以了解有关规范化及其形式的更多信息:规范化


使用几个字符串函数可以做到:

1
2
3
4
5
6
7
8
9
10
11
12
13
update yourtabel
set yourcol =
    concat(
        substring_index(yourcol, ',', 2), -- this will get string without trailing comma before third value
        ',',
        '2', -- the value you want to update to third value
        ',',
        substring_index(
            yourcol,
            ',',
            2 - (length(yourcol) - length(replace(yourcol, ',', '')))
        ) -- this will get string without heading comma after third value
     )

这是SQLFiddle中的一个演示。

SUBSTRING_INDEX:HTTPS://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index
长度:HTTPS://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_length
更换:HTTPS://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace


实际上你不应该用逗号存储这些值,因为这会导致SQL注入攻击并且没有其他原因。但是现在要处理下面的查询:

1
2
     update table_name set coulmn_name=REPLACE('1,5,8,9,7,10,5', '8', '2') where 1
 and conditions;

我们假设Student表中有SampleID:

表中名称的值为:'1,5,8,9,7,10,5',并且您想要将'8'替换为'2'

您可以使用以下查询:

1
2
UPDATE dbo.Student
SET [SampleID] = REPLACE([SampleID], '8', '2')

您可以进一步修改它以获得更高的准确性。