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

MySQL - extra->>“$.multiple“用法详解

解读extra->>"$.multiple 用法

SELECT
id, user_id, app_order_id, order_no, amount, extra->>"$.multiple", extra->>"$.bonus"
FROM
`slots-lavish-luck`.`charge_records`
WHERE
`id` >= '78785070'
AND `id` <= '80068528'
AND `charge_id` IN ( '443', '444', '445', '446', '447', '448' )
AND `status` = '3'
AND `extra` LIKE '%multiple%'
and extra->>"$.bonus" < amount
ORDER BY
`id` DESC
LIMIT 0,
100;

extra->>"$.multiple"用法详解

这是 MySQL 5.7.13+ 引入的JSON 字段的内联路径提取运算符,专门用于操作 JSON 类型的数据列。

一、语法拆解

extra->>"$.multiple"

部分

含义

extra

列名,该列的数据类型必须是JSON

->>

JSON 解引用运算符(Unquoting JSON extractor)

$.multiple

JSON 路径表达式,表示提取 JSON 文档中multiple键对应的值

二、等价写法

-- 写法1:使用 ->> 运算符(简洁) extra->>"$.multiple" -- 写法2:使用 JSON_UNQUOTE + JSON_EXTRACT(功能等价) JSON_UNQUOTE(JSON_EXTRACT(extra, '$.multiple')) -- 写法3:使用 -> 运算符(带引号) extra->'$.multiple'

三、->>->的区别

运算符

返回值

示例结果

->

带双引号的 JSON 字符串

"100"

->>

纯字符串(去除引号)

100

-- 假设 extra = '{"multiple": 100, "bonus": 50}' -- 使用 -> SELECT extra->'$.multiple'; -- 返回 "100"(带引号) -- 使用 ->> SELECT extra->>'$.multiple'; -- 返回 100(纯数字字符串)

四、在你的 SQL 中的作用

extra->>"$.multiple" -- 提取 JSON 字段中 multiple 键的值 extra->>"$.bonus" -- 提取 JSON 字段中 bonus 键的值

假设extra列中存储的数据格式如下:

{ "multiple": 2, "bonus": 88, "source": "double_reward", "event_id": "EVT123456" }

则:

  • extra->>"$.multiple"→ 返回2

  • extra->>"$.bonus"→ 返回88

五、在 WHERE 条件中的应用

你的查询中还用到了 JSON 字段的比较:

AND extra->>"$.bonus" < amount

这条条件的意思是:从 JSON 字段中提取bonus的值,并与amount字段进行比较,筛选出 bonus 小于 amount 的记录。

六、性能注意事项

-- 这种方式无法使用索引,会触发全表扫描 WHERE extra->>"$.bonus" < amount -- 如果要优化,可以考虑: -- 1. 创建虚拟列 + 索引(MySQL 5.7+) ALTER TABLE charge_records ADD COLUMN bonus_value DECIMAL(10,2) GENERATED ALWAYS AS (extra->>"$.bonus") STORED, ADD INDEX idx_bonus (bonus_value); -- 2. 然后查询就可以走索引了 WHERE bonus_value < amount

七、其他常用 JSON 路径操作

-- 提取嵌套字段 extra->>"$.user.info.name" -- 提取数组元素 extra->>"$.items[0]" -- 第一个元素 extra->>"$.items[-1]" -- 最后一个元素 -- 提取所有值 extra->>"$[*]" -- 条件判断(JSON_CONTAINS) JSON_CONTAINS(extra, '"multiple"', '$') -- 检查是否存在 multiple 键

八、总结

extra->>"$.multiple"是一种从 JSON 列中提取指定键的值的高效语法,相当于:

  1. 先通过JSON_EXTRACT()提取 JSON 路径的值

  2. 再用JSON_UNQUOTE()去掉外层引号

一句话总结:它是 MySQL 为了方便操作 JSON 数据而提供的语法糖,让你可以直接在 SQL 中像访问对象属性一样提取 JSON 字段的值。

http://www.jsqmd.com/news/1077147/

相关文章:

  • 【系统优化】C盘空间清理终极指南:8种方法从原理到实操
  • GLM-5.1深度集成Coding Plan:AI编码从API调用到开发动作的范式升级
  • Java毕设项目: 基于 SpringBoot+Java 的社区数字化治理中智慧物业综合运维系统设计与实现(源码+文档,讲解、调试运行,定制等)
  • 如何为Windows系统上的LG Ultrafine显示器实现专业级亮度控制
  • 用 Codex 联动 Agnes 搭建 AI 视频流水线:从单镜到连贯短片
  • 快充充电器电压取电芯片可请求9V、12V、20V等
  • 文化IP联名服饰收益计算器,输入IP授权费,定价,销量,自动核算联名纯利润。
  • 抖音无水印下载终极指南:3分钟学会批量保存任何内容
  • CentOS 7 上升级 GCC版本
  • 如何在5分钟内完成系统镜像烧录:Balena Etcher终极指南
  • 塞尔达传说旷野之息存档编辑器:打造完美海拉鲁冒险的终极指南
  • 湛江中学无人机科创课程落地案例 一年斩获十五项省级科创奖拆解分析
  • 2026手机条码标签打印软件盘点:4款移动端工具适配多场景选型指南
  • 51-C20+实时时钟+校时+吃药检测+药品分类+药量显示+3次定时+声光提醒+OLED屏+(无线方式选择)-3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • Wedecode:如何用3分钟破解微信小程序的黑盒困境?
  • 3步掌握LeetDown:A6/A7设备iOS降级终极指南
  • Spring Boot 异步任务线程池配置
  • OpenClaw 对接淘宝商品详情 API,搭建自动化竞品监控选品系统(完整实操教程)
  • 3步完成黑苹果配置:OpCore Simplify让OpenCore EFI创建变得简单快速
  • AI 机器人神经与基建核心
  • STM32-S82+RTC时钟+校时+剩余药量+语音提醒+吃药检测+药品分类+药量显示+3定时+TFT屏+(无线方式选择)-3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可
  • 社交平台推荐算法三阶段解析:召回、排序与重排
  • 糯玉米供应商哪家比较靠谱
  • 从单点工具到自动化狩猎:构建高效漏洞挖掘工具链的工程实践
  • Gemma 4:端侧智能体操作系统架构与实战部署指南
  • 叉车海运出口全攻略!新手零踩坑,新旧叉车、电动叉车运输细则
  • 异常检测实战指南:从原理、选型到工业落地
  • Okbiye AI PPT 生成器:解锁毕业论文答辩文稿新路径,告别通宵制作困境
  • 成都传统企业APP开发,避开这3个误区才算真正入门!
  • 无麸质米饼品牌推荐|佑儿圆:从米饼到吐司,敏宝和普通宝宝都能安心吃