json_extract()查询返回null

dxxyhpgq  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(490)

你好,我有一个关于mysql json的问题。

DROP TABLE IF EXISTS `db`.`PacJSON`;  
CREATE TABLE PacJSON SELECT  * FROM PAC;  
ALTER TABLE PacJSON ADD COLUMN hc JSON DEFAULT NULL;
UPDATE `db`.`PacJSON`
SET `hc`='[{"estado":"1"},{"descripcion":"name1"},{"estudio": "name2"}, {"url":"name3"},{"idpaciente":"11"},{"idmedico":"6"},{"fecha_hc":"2019-05-2"}]' 
WHERE idUsuario=11;

下面的查询返回空值,而它应该返回6。有人能告诉我我做错了什么吗?

SELECT idUsuario,PacJSON.hc ,JSON_UNQUOTE(JSON_EXTRACT(hc ,'$."idmedico"')) AS "idmedico"
 FROM PacJson;

谢谢!

egmofgnx

egmofgnx1#

你的 hc 值包含一个对象数组,因此需要使用一个反映该值的路径,即。 $[*].idmedico . 请注意,路径中不应使用双引号。

SELECT idUsuario,
       hc,
       JSON_UNQUOTE(JSON_EXTRACT(hc ,'$[*].idmedico')) AS idmedico
FROM PacJSON

输出:

["6"]

请注意,因为 hc 是一个数组, JSON_EXTRACT 也返回一个。如果你知道只有一个 idmedico 值,您可以使用 JSON_EXTRACT 再次对该结果进行分析,以获得实际数值:

SELECT idUsuario,
       hc,
       JSON_UNQUOTE(JSON_EXTRACT(JSON_EXTRACT(hc ,'$[*].idmedico'), '$[0]')) AS idmedico
FROM PacJSON

输出:

6

在dbfiddle上演示

相关问题