有表结构为这样的数据:
id | a | b | c | d |
---|---|---|---|---|
1 | a1 | b1 | c1 | |
2 | b1 | b2 | c2 | [{"a": "a1", "b": "b1", "c": "c1"}, {"a": "a2", "b": "b2", "c": "c2"}] |
其中这个表中abc为varchar,d为json格式。
现在打算把这两行的abc数据变成一个json,故创建函数:
CREATE FUNCTION get_json_test() RETURNS varchar(20000) CHARSET utf8
BEGIN
declare out_text blob default '';
select
concat( '[', group_concat( json_object(
"a",a,
"b",b,
"c",c
) ) , ']' ) into out_text
from table1 ;
RETURN out_text;
END
然后想通过伪列把所有包含a的数据都搜索出来,缺搜索的空,sql语句如下:select @t:=get_json_test() from dual where JSON_EXTRACT(@t, '$[*].a') LIKE "%a%";
但是直接搜索d就可以:select * from table1 where JSON_EXTRACT(d, '$[*].a') LIKE "%a%";;
请大神解释如何对这种结构数据进行模糊搜索呢?