我正在使用以下查询以保存一些信息
INSERT INTO table (name,color,value) VALUES ('john','green','0,98')
所有字段都有类型varchar,如果有重复键(假设john是键),我的查询应该更改为
INSERT INTO table (name,color,value) VALUES ('john','green','0,98')
ON DUPLICATE KEY UPDATE value=CAST(value as DECIMAL(??)) + ?? ;
在第二个例子中,我希望值为值+ =(表中的值)并将其保存为varchar,但我不知道如何配置它。谷歌没有帮助,我在这里找到了一些例子,但没有任何工作,因为我想要。
您使用的DBMS是什么?这是Postgres的UPSERT示例,您可以尝试:
INSERT INTO mytable (name, color, value)
VALUES('john', 'green', CAST('0.98' AS DECIMAL(10,2)))
ON CONFLICT (name) DO UPDATE SET
value = mytable.value + CAST('0.98' AS DECIMAL(10,2))
;
只需用您需要的小数精度替换小数精度,并输入正确的PK字段名称。我没有测试过,所以你可能需要修复语法。但它应该让您了解如何构建查询。
在MySQL中,您可以:
INSERT INTO table (name, color, value)
VALUES ('john', 'green', '0,98')
ON DUPLICATE KEY UPDATE value = ( VALUES(value) + 0 )+ value;
其工作原理如下:
VALUES(value)
是更新传递的值。+ 0
隐含转换为数字。+ value
增加现有价值。MySQL会将其转换回字符串。但是,我强烈建议您不要将数字存储为字符串。 SQL具有用于存储值的适当数据类型。使用它们。