很多时候,我们需要在sql里面直接解析json字符串。这里针对mysql5.7版本的分水岭进行区分。

1.对于mysql5.7以上版本

使用mysql的内置函数JSON_EXTRACT(column, '$.key'),这个函数有两个参数,第一个参数column代表json列的列名;第二个参数key代表json字符串中的某一个key。

SELECT JSON_EXTRACT('{"priceTag":"员工/合作关键人","priceDiscount":"90"}', '$.priceDiscount') AS '定价折扣';

对于简单的json字符串肯定是可以解析成功,但是对于嵌套数组的没试过。

2.对于mysql5.7以下版本

只能充分发挥已有函数的功能去截取实现,无论实现方式是存储过程还是简单的sql语句,其原理都是一样的。

第一步,将所有的花括号的闭括号'}'替换成英文逗号',';第二步,获取key的坐标keyIndex和长度keyLength;第三步,获取以key为起点,第一个英文逗号','的坐标symbolIndex;第四步,使用substring截取字符串SUBSTRING(targetJsonStr, keyIndex + keyLength, symbolIndex - keyIndex - keyLength);第五步,使用replace将双引号'"'替换成空字符串'',完工。

示例:从{"priceTag": "员工/合作关键人","priceDiscount": "90"}中获取priceDiscount的值。

SELECT REPLACE

(

SUBSTRING(

REPLACE('{"priceTag":"员工/合作关键人","priceDiscount":"90"}','}',','),

LOCATE('priceDiscount":',REPLACE('{"priceTag":"员工/合作关键人","priceDiscount":"90"}','}',','))+CHAR_LENGTH('priceDiscount":'),

LOCATE(

',',

REPLACE('{"priceTag":"员工/合作关键人","priceDiscount":"90"}','}',','),

LOCATE('priceDiscount":',REPLACE('{"priceTag":"员工/合作关键人","priceDiscount":"90"}','}',',')) + CHAR_LENGTH('priceDiscount":')

) - (LOCATE('priceDiscount":',REPLACE('{"priceTag":"员工/合作关键人","priceDiscount":"90"}','}',',')) + CHAR_LENGTH('priceDiscount":'))

),'"',''

) AS '定价折扣';

mysql怎么解析json字符串_mysql解析json字符串相关推荐

  1. mysql更新字符串中某个字符串_mysql更新某个字符串字段的部分内容

    如果现在需要Mysql更新字段重部分数据,而不是全部数据,应该采用何种方法呢?下面介绍了两种情况下Mysql更新字段中部分数据的方法,供您参考. Mysql更新字段中部分数据第一种情况: update ...

  2. mysql解析json字符串_Mysql解析json字符串/数组

    1 Mysql解析json字符串 解决方法:JSON_EXTRACT(原字段,'$.json字段名') 执行SQL: SELECT JSON_EXTRACT( t.result,'$.row'), J ...

  3. mysql+json插入_MySQL对JSON数据的增删改查

    MySQL从5.7版本开始就支持JSON格式的数据,操作用起来挺方便的. 建表 在新建表时字段类型可以直接设置为json类型,比如我们创建一张表: CREATE TABLE `test_user` ( ...

  4. mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...

    背景 一个最简单的select语句包含select子句.from子句.where子句等,这些子句都不包含子查询(subselect),也没有union操作.而复杂的select语句包含select子句 ...

  5. mysql o转数字排序_mysql学习,字符串转成数字并比较排序

    SUBSTRING_INDEX([列名],[分割符],[段数]) 列名:要分割列里内容的列名 分割符:用来切割的符号 段数:切割后取的长度 以下示例说明参数: 表info 列c_code 值 1-10 ...

  6. mysql 分组 字符串_MySQL查询以字符串字段中的数字字符对行进行分组?

    为此,您可以在+运算符的帮助下将0与字符串字段连接起来.这里的场景就像我们需要从字符串字段" 9844Bob "中获取数字" 9844 ". 让我们首先创建一个 ...

  7. mysql中逗号前的字符串_MySql逗号拼接字符串查询的两种方法

    下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SET或FIND_ALL_PART_IN_SET 例如某字段里是为1,2,3,4,5 ...

  8. mysql 字符转换函数是_MySQL日期和字符串转换函数

    Mysql中to_char()和str_to_date()函数 转载路径:https://blog.csdn.net/ricardo_mli/article/details/80217512 1.字符 ...

  9. mysql截取前几个字符串_MySql中截取字符串中的某几个字符

    --先创建一个取json数据的方法 CREATE function `get_json_data`( jsonstr VARCHAR(100), keystr VARCHAR(20) ) RETURN ...

  10. mysql 存储过程 长字符串_mysql存储过程瓜分字符串

    mysql存储过程分割字符串 DROP PROCEDURE IF EXISTS split_string; CREATE PROCEDURE split_string(IN to_split VARC ...

最新文章

  1. 最全面的百度地图JavaScript离线版开发
  2. Ubuntu通过windows代理上网
  3. C#LeetCode刷题之#674-最长连续递增序列( Longest Continuous Increasing Subsequence)
  4. 1095 解码PAT准考证 (25 point(s)) - PAT乙级真题
  5. 想交换机高级篇的朋友们,你们有福啦
  6. Vue——B站黑马程序员教程
  7. 3、FFmpeg 过滤器
  8. 计算机网络——常用的网络命令
  9. HTML 网页自动刷新
  10. [转载]提升你幽默感的100句经典短语
  11. 彻底搞懂MySQL的索引
  12. Salesforce系列(十):Salesforce Schedule cron定时执行方法!
  13. 05 Java 虚拟机.md
  14. 【产品集】什么是堡垒机?为什么需要堡垒机
  15. C语言对于char*和char[]的理解
  16. 送一朵玫瑰花给女朋友
  17. mysql分布式事务wcf_[转载]WCF系列_分布式事务(下)
  18. 你真的了解机器学习、人工智能、统计建模吗?
  19. 生物信息学技术在罕见病研究中的应用
  20. 2011年度全球50个最佳网站

热门文章

  1. 200724 EXCEL
  2. HTML表格之合并单元格
  3. 成功解决台式电脑或者笔记本电脑右下角音量、电池等图标消失等问题
  4. VR MultiPass\SinglePass(Instanced)\MultiView 浅析和区分总结
  5. SQL:取 分组后 的 按时间倒序 的前5条数据
  6. js文本框设置必填项_JS校验表单必填项
  7. LabVIEW编程LabVIEW开发 控制Keithley 2700例程与相关资料
  8. excel组合工具使用
  9. python 实现改变excel文件列宽
  10. java 时区 mysql 时区:时区在程序和数据库中的作用及其机制