【问题标题】:MariaDB JSON add number to valueMariaDB JSON 将数字添加到值
【发布时间】:2023-03-29 13:31:01
【问题描述】:

我有桌子:

CREATE TABLE IF NOT EXISTS `t2` (
  `j` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`j`))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `t2` (`j`) VALUES
    ('{"sdsd": 123, "qqq": 456, "data": [{"www": 789, "eee": 98}, {"ddd": 578}]}');

并且需要将 json 值“www”更新为 +10。我尝试这样做:

UPDATE t2 set j = JSON_SET(j, "$.data[0].www", "$.data[0].www" +1) ;

但是得到一个错误:

SQL 错误 (1292):截断不正确的 DOUBLE 值:'$.data[0].www'

请帮忙,如何正确更新值?谢谢!

【问题讨论】:

    标签: sql arrays json sql-update mariadb


    【解决方案1】:

    您将 JSON 路径作为第三个参数提供给 json_set(),而您的意思是检索存储在该路径中的值 - 为此,您可以使用 json_extract()

    update t2 
    set j = json_set(
        j, 
        '$.data[0].www', 
        json_extract(j, '$.data[0].www') + 1 
    );
    

    Demo on DB Fiddlde

    | j | | :------------------------------------------------ ------------------------------------ | | {“sdsd”:123,“qqq”:456,“数据”:[{“www”:790,“eee”:98},{“ddd”:578}]} |

    注意:这是有效的,因为您的数值是 JSON 数字(也就是说,它们没有用双引号括起来)。如果你有 JSON 字符串,那么你需要先取消引用它们:

    update t2 
    set j = json_set(
        j, 
        '$.data[0].www', 
        json_unquote(json_extract(j, '$.data[0].www')) + 1 
    );
    

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2022-11-27
      • 2017-10-17
      相关资源
      最近更新 更多