mysql json where子句

标签 mysql json sqldatatypes mysql-8.0

我在表 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/

相关文章:

mysql - 在不存在的情况下使用插入和嵌套选择语句的 SQL

java - 使用 Jackson ObjectMapper 将子类名称序列化为 JSON,而不是父类(super class)

c# - 空 DataTable 到 Json 并包含列名称

c# - SQL Server 数据库中数据类型 nchar 的问题

android - TEXT数据类型会限制长度吗?

mysql - 为什么我在 MySQL 中设置更大的 INT 数据类型长度时没有收到错误消息?

html - UPDATE a table 删除一长串html

php - 使用 PHP 更新数据库中的多行,但仅更新前三行

json - 如何从 Wikipedia API 获取第一个结果的描述和图像

mysql - 如何将多行变成具有不同列的单行