当前位置: 首页 > article >正文

mysql使用sql函数对json数组的处理

MySQL从5.7版本开始增加了对JSON数据类型的支持。你可以使用->>操作符和JSON_EXTRACT函数来访问JSON数据中的值。

但是,对于JSON数组,如果你想要获取数组中的所有元素,MySQL并没有直接的函数来返回数组中的所有元素作为单独的行。不过,你可以通过编写一个自定义的函数或使用应用程序逻辑来遍历数组。

然而,对于简单的场景,比如只获取数组的第一个元素,你可以这样做:

SELECT JSON_UNQUOTE(JSON_EXTRACT(json_column, '$[0]')) AS first_element  
FROM my_table;

 再举下实际的例子:

像数据库里存的是以上这种数据,sql语句如下:

SELECT id,JSON_UNQUOTE(JSON_EXTRACT(price, '$[0]')) AS first_element,JSON_UNQUOTE(JSON_EXTRACT(price, '$[1]')) AS first_element  
FROM g_user_demand;

查询结果如下:

下面我再使用另外一种复杂的方法,在网上找的多表联查

1、提取json数组的数值,如:[8000,10000],还有一种格式:["8000","10000"]

2、假设您有一个表 your_table,其中有一个字段 range_field 存储了类似 ["8000","10000"] 的字符串。假设您还有一个表 another_table,其中存储了要value_field字段检查的值,

3、您可以执行以下查询来检查 another_table 中的 value_field 是否在 your_table 中提取的范围内:

SELECT 
    a.id AS another_table_id,
    a.value_field,
    y.id AS your_table_id,
    y.range_field
FROM 
    another_table a
JOIN 
    your_table y
WHERE 
    a.value_field BETWEEN 
        CAST(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(y.range_field, ',', 1), '"', -1), '[', '') AS UNSIGNED) AND
        CAST(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(y.range_field, ',', -1), '"', -1), ']', '') AS UNSIGNED);

4、解释

CAST(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(range_field, ',', 1), '[', -1), ']', '') AS UNSIGNED) AS min_value,
    CAST(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(range_field, ',', -1), ']', 1), ']', '') AS UNSIGNED) AS max_value
  • SUBSTRING_INDEX(range_field, ',', 1):获取第一个逗号之前的部分,即 ["8000"
  • SUBSTRING_INDEX(..., '"', -1):去掉开头的 [ 和引号,得到 "8000"
  • REPLACE(..., ']', ''):去掉结尾的 ],最终得到 "8000"
  • 类似地,使用 SUBSTRING_INDEX(range_field, ',', -1) 来获取第二个值。


http://www.kler.cn/news/312026.html

相关文章:

  • 首席数据官(CCRC-CDO)的职业价值
  • 学习最佳实践G4F中的编程技术:获得python项目的当前安装版本
  • 2024年【汽车驾驶员(高级)】考试报名及汽车驾驶员(高级)模拟考试题
  • 项目实战bug修复
  • pikachu XXE(XML外部实体注入)通关
  • TCP协议分析《实验报告》
  • 第三方接口-苹果-获取天气接口
  • Flask、Werkzeug 和 WSGI 间的关系
  • 代码随想录算法训练营第三十二天 | 509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
  • PHP 实现 redis 分布式锁
  • 中间件安全(二)
  • 作品集生成链接或二维码:设计师求职
  • 数据结构和算法之线性结构
  • Java中Integer的缓存池是怎么实现的?
  • 旧系统迁移新框架:FastAPI 的 WSGIMiddleware 让过程变得简单
  • 松材线虫无人机数据集——20731个,已人工标注出来的样本【深度学习样本】
  • 【Leetcode:2848. 与车相交的点 + 模拟计数】
  • Java | Leetcode Java题解之第413题等差数列划分
  • 最新!综合性SCI期刊汇总!《NATURE》位居榜首~
  • 大数据基础架构技术栈一览
  • Redis 的三个并发问题及解决方案(面试题)
  • 【AI大模型】ChatGPT模型原理介绍(下)
  • Redis 执行 Lua,能保证原子性吗?
  • 深入解析 JVM 中静态块、静态属性、构造块与构造方法的执行顺序
  • Vue2项目升级攻略:如何更新package.json中的依赖
  • WPF 中的线程池
  • 阿里云盘照片事件!网络安全警钟长鸣
  • 网站采用H5+CSS3开发的优势和劣势
  • postgresql-patroni高可用安装部署
  • 中国电子学会202306青少年软件编程(Python)等级考试试卷(二级)真题