MySQL select 其中 JSON 字段 属性 具有值

MySQL select where JSON field property has value

如何编写一个基本的 MySQL 查询,它在 JSON 数据类型字段中的 属性 上有一个 WHERE?我没有在 SO 上看到 json 字段的基本 where 子句 q。

类似这样的东西,但是这些当然不起作用:

SELECT * from my_table where meta_data->name = 'bob';

SELECT * from my_table where meta_data[name] IS NOT NULL;

如何查询 json 数据类型字段的一些示例:

SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.first_name") = 'bob';

SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.age") IS NOT NULL;

SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.accepted_policy") = true;

和mysql5.7.9+

您也可以这样做(JSON_EXTRACT 的快捷方式):

SELECT * FROM users WHERE meta_data->"$.first_name" = 'bob'

您可能会注意到您的 json 数据结果是 "quoted"。您可以使用 JSON_UNQUOTE,也可以使用 JSON_EXTRACT & JSON_UNQUOTE:

的快捷方式
SELECT meta_data->>"$.first_name" FROM users WHERE meta_data->>"$.first_name" IS NOT NULL

以及子对象中的 select 数据:

SELECT meta_data->>"$.address.tel" FROM users WHERE meta_data->>"$.address.street" = "123 Main St"

文档:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

Use Below query for WHERE operation with JSON Datatype Field in mysql

SELECT meta_data->'$.first_name' meta_data FROM users WHERE INSTR(meta_data->'$.first_name','123') > 0