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

news/2024/9/19 22:22:35 标签: mysql, sql, json

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

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

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

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

 再举下实际的例子:

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

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 中提取的范围内:

sql">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、解释

sql">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.niftyadmin.cn/n/5666225.html

相关文章

翻页时钟 2.0-自动置顶显示,点击小时切换显示标题栏不显示标题栏-供大家学习研究参考

更新内容 自动置顶显示点击小时切换显示标题栏,(显示标题栏后可移动时钟位置,鼠标拖动边框调整时钟大小)不显示标题栏时,透明部分光标可穿透修正一个显示bu 下载地址: https://download.csdn.net/download…

nodejs 011: nodejs事件驱动编程 EventEmitter 与 IPC

在 Node.js 和许多 JavaScript 环境中,EventEmitter 是一个非常重要的类,用于处理事件驱动编程。EventEmitter 是一个能够发射(emit)和监听(on)事件的对象。它常用于创建和处理事件机制,使得程序…

基于springboot+vue图书管理系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,图书信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

macOS平台编译MAVSDK源码生成mavsdk库与mavsdk_server服务可执行文件

克隆源码: 克隆命令 git clone https://github.com/mavlink/MAVSDK.git --recursive 克隆成功如下: 生成makefile (只生成mavsdk库) cmake -Bbuild/default -DCMAKE_BUILD_TYPE=Debug -H. 指定安装目录与生成目录: cmake -Bbuild/macos -DCMAKE_BUILD_TYPE=Debug -…

源代码防泄密的危害有哪些?担心源代码泄露?教你五种方法彻底阻止源代码泄密问题!

在数字经济蓬勃发展的今天,源代码,这个企业的核心技术资产,其安全性直接关系到企业的竞争力与生存。 一旦源代码泄露,不仅可能导致巨大的经济损失,更可能让企业陷入法律纠纷与声誉危机。 那么,源代码防泄密…

IOS 24 实现歌单详情(UITableView)列表

歌单详情完整效果 歌单详情歌单列表效果 歌单详情列表页整体效果稍微有点复杂,我们进行分部实现,先实现歌单详情里面的歌单列表,使用UITableView来实现。UITableView的使用在之前的文章中多次使用,想来也比较熟悉了。不熟悉的可以…

Python中的异步编程:从基础知识到高级应用

随着互联网应用的不断发展,高并发和高性能成为越来越多开发者关注的重点。Python 3.5引入了asyncio库和async/await语法,使得异步编程变得更加简洁和高效。本文将详细介绍Python中的异步编程,从基础知识到高级应用,帮助你掌握这一…

Matlab对状态机建模的方法

【 线性代数 状态机 】良好的控制系统设计 (根据现有的情况总结出状态转移方程) 状态组件在设计时需要考虑的内容 AI 的逻辑 可以提供一个思路 python 库调用的路径,必须是完整的路径 python 解释器的入口