我正在寻找一种方法来更新或更好地将每个值连接到一个JSON数组中。所有的值都是字符串。我知道,在更简单的情况下,我可以做一些替换的事情,比如:
SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) AS 'Result';这将将第一个字段替换为9;但是有一种方法可以用一个固定字符串连接每个值吗?我知道这是不正确的,但有点像:
SELECT JSON_REPLACE('[1, 2, 3]', '$[*]', concat($[*], 'fixed')) AS 'Result';要获得
'["1fixed", "2fixed", "3fixed"]谢谢!
发布于 2022-03-08 16:51:44
mysql> select json_arrayagg(concat(val, 'fixed')) as result
from json_table('[1, 2, 3]', '$[*]' columns (val int path '$')) as j;
+--------------------------------+
| result |
+--------------------------------+
| ["1fixed", "2fixed", "3fixed"] |
+--------------------------------+MySQL 8.0是JSON_TABLE()函数所必需的。MySQL 5.7或更高版本是JSON_ARRAYAGG()函数所必需的。
如果这看起来很复杂,对不起,但这是将数据存储为JSON字符串的结果,然后尝试对字符串中的值使用SQL表达式。这肯定会很尴尬,因为您正在实现一个名为内平台效应的反模式。
如果您不将数据存储为JSON数组,而是以普通形式存储数据,每行只有一个值,这就容易多了。
https://stackoverflow.com/questions/71398544
复制相似问题