MySQL 在 JSON 数组中搜索值,使用 `like` 或正则表达式
MySQL searching JSON array for value, using `like` or regexp
我有一个 table,其中有一个名为 data_json
的字段。
JSON 形状的示例如下:
{
title: "My Title",
arr: ["hello there", "foobar", "foo hello bar"]
}
我只想找到 data_json->'$.arr'
包含值的行,使用 regexp
或 like
.
例如:
select * from mytable where ??? like '%hello%';
需要提取数组的元素。要执行此 JSON_EXTRACT()
函数,可以将其与索引值一起使用,直至其长度。通过 information_schema
的元数据表的行生成方法,如下所示,可用于生成这些索引值:
SELECT value
FROM
(
SELECT @i := @i + 1 AS rn,
JSON_UNQUOTE(JSON_EXTRACT(data_json, CONCAT('$.arr[',@i-1,']'))) AS value
FROM information_schema.tables
CROSS JOIN mytable
CROSS JOIN (SELECT @i := 0) r
) q
WHERE value LIKE '%hello%'
我有一个 table,其中有一个名为 data_json
的字段。
JSON 形状的示例如下:
{
title: "My Title",
arr: ["hello there", "foobar", "foo hello bar"]
}
我只想找到 data_json->'$.arr'
包含值的行,使用 regexp
或 like
.
例如:
select * from mytable where ??? like '%hello%';
需要提取数组的元素。要执行此 JSON_EXTRACT()
函数,可以将其与索引值一起使用,直至其长度。通过 information_schema
的元数据表的行生成方法,如下所示,可用于生成这些索引值:
SELECT value
FROM
(
SELECT @i := @i + 1 AS rn,
JSON_UNQUOTE(JSON_EXTRACT(data_json, CONCAT('$.arr[',@i-1,']'))) AS value
FROM information_schema.tables
CROSS JOIN mytable
CROSS JOIN (SELECT @i := 0) r
) q
WHERE value LIKE '%hello%'