使用JSON_EXTRACT匹配某个json类型字段中的某个具体字段

使用JSON_EXTRACT匹配某个json类型字段中的某个具体字段

  • [1. 使用场景](#1. 使用场景)
  • [2. 来自ChatGPT的`JSON_EXTRACT`使用说明](#2. 来自ChatGPT的JSON_EXTRACT使用说明)

1. 使用场景

  1. 如果你有一张表table,其中有一个字段attrs,并且该字段是一个json,其中又包括totalPrice、skuPrice、couponPrice三个字段;

  2. 而你现在只想查出数据库中skuPrice字段为0的记录;

  3. 那么这条SQL该怎么写呢?

  4. 如果是MySQL,可以使用JSON_EXTRACT,具体SQL语句如下:

    sql 复制代码
    SELECT * FROM table
    WHERE JSON_EXTRACT(attrs, '$.skuPrice') = 0;
  5. 如果是HiveSQL,可以使用get_json_object,具体SQL语句如下:

    sql 复制代码
    SELECT * FROM table
    WHERE get_json_object(attrs, '$.skuPrice') = 0;

2. 来自ChatGPT的JSON_EXTRACT使用说明

在MySQL中,JSON_EXTRACT是一个用于提取JSON数据中特定路径的函数。它接受两个参数:JSON文档和要提取的路径。

以下是JSON_EXTRACT函数的基本语法:
JSON_EXTRACT(json_doc, path)

  • json_doc是一个包含JSON数据的字段或表达式。
  • path是一个表示要提取的路径的字符串。

路径可以使用点号(.)来访问JSON对象的属性,也可以使用方括号([])来访问JSON数组的索引。例如,如果有以下JSON文档:

json 复制代码
{
  "employee": {
    "name": "John Doe",
    "age": 30,
    "departments": ["HR", "IT"]
  }
}

你可以使用JSON_EXTRACT函数来提取其中的值:

sql 复制代码
SELECT JSON_EXTRACT(json_doc, '$.employee.name') AS employee_name,
       JSON_EXTRACT(json_doc, '$.employee.departments[0]') AS first_department
FROM your_table;

在上面的例子中,我们使用JSON_EXTRACT函数从json_doc字段中提取了"employee"对象的"name"属性和"departments"数组的第一个元素。

另外,JSON_EXTRACT函数还支持更复杂的路径表达式,例如使用通配符*来匹配多个属性或索引。此外,还可以通过使用JSON_UNQUOTE函数来移除提取的结果中的引号,如果结果是一个字符串。

需要注意的是,JSON_EXTRACT函数在MySQL 5.7版本之后才可用,并且需要在MySQL中启用JSON功能。

相关推荐
许愿OvO12 分钟前
MySQL 8.3.0 运维与集群架构实战
运维·mysql·架构
程序员张31 小时前
MySQL创建用户且只能访问指定数据库表
mysql
阿维的博客日记2 小时前
我现在能理解mvcc让读不阻塞,但是无法理解mvcc让写不阻塞??
mysql·事务·mvcc
禹凕2 小时前
MYSQL——基础知识(SQL的临时表和克隆表)
sql·mysql
jvvz afqh2 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
阿维的博客日记3 小时前
隔离性和mvcc有什么关系吗
数据库·mysql·事务·mvcc·隔离性
Vect__3 小时前
初识MySQL,数据库相关概念,库操作,表操作
数据库·mysql
空空潍3 小时前
MySQL索引不生效?一文理解CBO成本模型
数据库·sql·mysql
nLYA SCOL3 小时前
MySQL数据的增删改查(一)
android·javascript·mysql
code bean4 小时前
MySQL 远程访问实战:从基础操作到真实踩坑记录
数据库·mysql