sql - MariaDB JSON 将数字添加到值
问题描述
我有表:
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'
请帮忙,如何正确更新值?谢谢!
解决方案
您将 JSON 路径作为第三个参数提供给json_set()
,而您的意思是检索存储在该路径中的值 - 为此,您可以使用json_extract()
:
update t2
set j = json_set(
j,
'$.data[0].www',
json_extract(j, '$.data[0].www') + 1
);
| 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
);
推荐阅读
- c# - 如何使 Task.WhenAny 对 Task 和 CancellationToken 生效?
- java - Java Swing - 如何使用 MigLayout 将 JTable 放入 JScrollPane 中而不会出现问题?
- scala - 如何更新数据框中列的所有值
- selenium - 为什么这个“等到页面包含”不能按规定工作?
- android - 导航组件似乎只是使用短动态链接(firebase)
- salesforce - 用于搜索对象计数的 Salesforce REST API
- python - 使用服务和主机项目、共享 VPC 和防火墙规则时出现 Google Dataflow 警告
- cassandra - 如何在pyspark中将字符串列转换为ArrayType
- makefile - 如何在 makefile 循环中解释 $@ 符号
- javascript - 如何从日期时间中删除时间?