我创建了一个以逗号分隔形式存储值的表。 是否有任何机制可以达到以下效果?
我在表格中有一个名为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
答案 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