MySQL附加到年份值

时间:2018-04-11 13:40:25

标签: mysql json

我在mysql中有以下格式:

{"2017": {"1": {"payed": 0, "charge": 0}}}

使用这种格式我做了早期的SQL查询,并且工作非常好(读取/更新付费和充电值),但是我有问题,当我需要追加到它“2018”年,所以我需要得到这个:< / p>

{"2017": {"1": {"payed": 0, "charge": 0}}, "2018": {"1": {"payed": 0, "charge": 0}}}

我尝试使用此代码添加“2018”年:

UPDATE calculation 
SET payment = JSON_ARRAY_APPEND(payment, '$', CAST('{"2018": {"1": {"payed": 0,"charge": 0}}}' as JSON));

得到这个:

[{"2017": {"1": {"payed": 0, "charge": 0}}}, {"2018": {"1": {"payed": 0, "charge": 0}}}]

我的previus SQL Query不起作用,因为它们需要:

{"2017": {"1": {"payed": 0, "charge": 0}}, "2018": {"1": {"payed": 0, "charge": 0}}}

如何成功附加以获得我需要的格式?重写previus SQL查询,这是很多工作,所有都是连接的。所以我需要追加并获得这种格式...谢谢。

2 个答案:

答案 0 :(得分:0)

好的,我这样做很长,但如果有人知道如何改进一个SQL查询就可以了:

UPDATE calculation
SET payment = SUBSTRING(payment, 1, CHAR_LENGTH(payment)-1);

UPDATE calculation
SET payment = CONCAT(payment, ', "2018": {"1": {"payed": 0, "charge": 0}}}');

所以第一个查询从付款字段中的JSON字符串中删除最后一个} ....第二个查询在字段中添加2018年的新付款值,这样我就拥有了我需要的东西:

{"2017": {"1": {"payed": 0, "charge": 0}}, "2018": {"1": {"payed": 0, "charge": 0}}}

所以为了获得性能并使其更快......我需要将其重写为单个查询...

答案 1 :(得分:0)

好的..在合并上面的两个命令后,我最终得到了它:

UPDATE calculation
SET payment = CONCAT(SUBSTRING(payment, 1, CHAR_LENGTH(payment)-1), ', "2018": {"1": {"payed": 0, "charge": 0}}}');

这不是聪明的方式,但它有效。