我在表 PRICING_DATA 中有一个包含以下 json 数据类型列的表
pricingJson type json nullable
我正在使用 sql 查询表。
select * from `PRICING_DATA` where `pricingJson`->"$.product.productFamily" = "Compute Instance";
示例json数据如下
{
"product": {
"productFamily": "Compute Instance",
"attributes": {
"enhancedNetworkingSupported": "Yes",.....
但是查询没有返回任何行。 我在这里做错了什么?
来自数据库的 Json 原始字符串似乎已转义。
"{\"product\":{\"productFamily\":\"Compute Instance\",\"attributes\":{\"enhancedNetworkingSupported\":\"Yes
我已经使用了下面的 json unquote 但它仍然没有给我任何行。
select * from `PRICING_DATA` where JSON_UNQUOTE(JSON_EXTRACT(pricingJson, "$.product.productFamily")) = "Compute Instance";
最佳答案
您需要“取消引用”JSON 字符串才能对其进行比较。
select * from `PRICING_DATA` where `pricingJson`->>"$.product.productFamily" = "Compute Instance";
文档:https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_json-inline-path
使用 pricingJson->"$.product.productFamily"
是
JSON_EXTRACT(pricingJson, "$.product.productFamily")
返回值,但作为引号 字符串。所以:
SELECT pricingJson->"$.product.productFamily" FROM PRICING_DATA
会返回:
+-----------------------------------------+
| pricingJson->"$.product.productFamily" |
+-----------------------------------------+
| "Compute Instance" |
+-----------------------------------------+
您需要使用 JSON_UNQUOTE()
函数删除引号,使用 pricingJson->>"$.product.productFamily"
是以下内容的简写:
JSON_UNQUOTE(JSON_EXTRACT(pricingJson, "$.product.productFamily"))
关于mysql json where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56188209/