从Mariadb中的JSON数组获取数据

从Mariadb中的JSON数组获取数据,json,mariadb,Json,Mariadb,我正在尝试获取结束日期小于今天日期且id=14的记录。但我得到的结果是0。如何从数组中查找记录 CREATE TABLE `test_udc` ( `id` int(10) NOT NULL, `test_udc` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL ) ; INSERT INTO `test_udc` (`id`, `test_udc`) VALUES (1, '[{\"id\"

我正在尝试获取结束日期小于今天日期且id=14的记录。但我得到的结果是0。如何从数组中查找记录

CREATE TABLE `test_udc` (
  `id` int(10) NOT NULL,
  `test_udc` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
) ;



INSERT INTO `test_udc` (`id`, `test_udc`) VALUES
(1, '[{\"id\":7,\"desc\":\"Be Alert\"},{\"id\":8,\"desc\":\"Dog - Phone Ahead\"},{\"id\":14,\"desc\":\"Self-Isolating CV19\",\"start_date\":\"04-02-2021\",\"end_date\":\"14-02-2021\"}]'),
(2, '[{\"id\":7,\"desc\":\"Be Alert\"},{\"id\":14,\"desc\":\"Self-Isolating CV19\",\"start_date\":\"04-02-2021\",\"end_date\":\"16-02-2021\"}]');
我有

SELECT * FROM `test_udc` where json_value(`test_udc`,'$.[*].id')='14' AND json_value(`test_udc`,'$.[*].end_date')<'2021-02-15'

首先,需要通过将$.[*]转换为$[*]来修复格式。然后,考虑JDSON值中的文字,使用DATEYFALSE函数。最后,使用嵌套在JSON_值中的JSON_搜索函数来提取与id和desc的已找到索引值匹配的相关值,例如


如果只使用id和desc列而不是JSON值,那么这将非常容易。
SET @id = 14;

WITH t AS
(
 SELECT JSON_UNQUOTE(JSON_SEARCH(`test_udc`, 'one', @id)) AS elm,
        t.* 
   FROM `test_udc` AS t
  WHERE STR_TO_DATE(JSON_VALUE(`test_udc`,'$[*].end_date'),'%d-%m-%Y') < CURDATE()
)
SELECT JSON_VALUE(`test_udc`,elm) AS elm_id,
       JSON_VALUE(`test_udc`,REPLACE(elm,'id','desc')) AS elm_desc
  FROM t ;

elm_id  elm_desc
------  -------------------
14      Self-Isolating CV19