【发布时间】:2020-11-05 09:20:27
【问题描述】:
我知道函数如:JSON_SEARCH() 和JSON_EXTRACT() 等。这个问题是我在一个非标准化的 json 字符串中搜索一个键。例如:
SELECT
*
FROM
users
结果可能是这样的:
+---------------------------------------------+
| name | last | data |
+------+------+-------------------------------+
| john | doe | {"acctNum": "123"} |
+------+------+-------------------------------+
| john | doe | {"data":{ "acctNum": "123" }} |
+------+------+-------------------------------+
| jane | doe | {"data":{ "acctNum": "1234" }}|
+------+------+-------------------------------+
所以在这个例子中,我想得到 john doe,acctNum 为 123。但是,acctNum 键的位置也不同。我见过here,您可以使用:JSON_SEARCH(data, $**.acctNum),但我得到空结果,
在一个理想的世界里,我想要的是:
SELECT * FROM users WHERE JSON_EXTRACT(data, "$**.acctNum") = 123
并接收
+---------------------------------------------+
| name | last | data |
+------+------+-------------------------------+
| john | doe | {"acctNum": "123"} |
+------+------+-------------------------------+
| john | doe | {"data":{ "acctNum": "123" }} |
+------+------+-------------------------------+
另外,在上面的链接中找到键 acctNum 可能是非常嵌套的。
我曾尝试将正则表达式与 SELECT * FROM users WHERE data REGEXP '123'; 一起使用,但正如您所想象的那样,用户 jane doe 也将被匹配
【问题讨论】: