使用特定逗号分隔值更新列

时间:2017-06-07 05:50:38

标签: mysql sql

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

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

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

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

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

4 个答案:

答案 0 :(得分:3)

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

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

虽然现在这个查询有帮助,但请考虑更改结构。

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

点击此链接以了解有关规范化及其表单的更多信息:Normalization

答案 1 :(得分:0)

我们假设学生表中有 SampleID 列:

表中名称的

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

您可以使用以下查询:

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

您可以进一步修改以提高准确性。

答案 2 :(得分:0)

实际上你不应该用逗号存储这些值,因为这会导致SQL注入攻击而后面没有reasons。现在可以处理以下查询:

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

答案 3 :(得分:0)

使用多个字符串函数可以做到这一点:

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