MySQL中json_extract()函数的使用实例

目录
  • MySQL中json_extract()函数的使用
    • 一、初始化
    • 二、执行json_extract()
  • MySql中json_extract函数的一个特殊之处
    • 在MySql中,是这样的
    • 而在Oracle中,是这样的

MySQL中json_extract()函数的使用

作用:截取数据库中指定字段中存储的json数据中的某个字段对应的值

要做做什么?(根据数据库中相关表字段中存储的json格式的数据,然后以SQL语句的形式取出其中指定key对应的值,最终整理汇总为一张视图供以后的方便使用)

一、初始化

1、初始化表结构

CREATE TABLE `cus_history` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `customer_id` bigint(20) NOT NULL COMMENT '客户id',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `sex` char(2) DEFAULT NULL COMMENT '性别',
  `sex_name` varchar(200) DEFAULT NULL COMMENT '性别',
  `birthday` date DEFAULT NULL COMMENT '出生日期',
  `birtydaytype` char(2) DEFAULT NULL COMMENT '出生日期类型',
  `birtydaytype_name` varchar(200) DEFAULT NULL COMMENT '生日类型',
  `age` varchar(20) DEFAULT NULL COMMENT '年龄',
  `nation` char(2) DEFAULT NULL COMMENT '民族',
  `nation_name` varchar(200) DEFAULT NULL COMMENT '民族',
  `religion` char(2) DEFAULT NULL COMMENT '宗教',
  `religion_name` varchar(200) DEFAULT NULL COMMENT '宗教',
  `phone` varchar(20) DEFAULT NULL COMMENT '手机',
  `marriage` char(2) DEFAULT NULL COMMENT '婚姻',
  `marriage_name` varchar(200) DEFAULT NULL COMMENT '婚姻',
  `service_gradation` char(4) DEFAULT NULL COMMENT '服务等级',
  `service_gradation_name` varchar(200) DEFAULT NULL COMMENT '服务等级',
  `occupation` char(2) DEFAULT NULL COMMENT '职业',
  `occupation_name` varchar(200) DEFAULT NULL COMMENT '职业',
  `education` char(2) DEFAULT NULL COMMENT '教育程度',
  `education_name` varchar(200) DEFAULT NULL COMMENT '学历',
  `blood` char(2) DEFAULT NULL COMMENT '血型',
  `blood_name` varchar(200) DEFAULT NULL COMMENT '血型',
  `blood_rh` char(2) DEFAULT NULL COMMENT 'rh血型',
  `blood_rh_name` varchar(200) DEFAULT NULL COMMENT 'rh血型',
  `kind` char(2) DEFAULT NULL COMMENT '顾客类型',
  `kind_name` varchar(200) DEFAULT NULL COMMENT '顾客类型',
  `gradation` char(2) DEFAULT NULL COMMENT '顾客级别',
  `gradation_name` varchar(200) DEFAULT NULL COMMENT '顾客级别',
  `register_addr` varchar(200) DEFAULT NULL COMMENT '户口地址',
  `contact_addr` varchar(200) DEFAULT NULL COMMENT '联系地址',
  `address_backup` text COMMENT '地址归档',
  `relations_backup` text COMMENT '联系人归档',
  `allowancetype_backup` text COMMENT '津贴归档',
  `medicaltype_backup` text COMMENT '医保类型归档',
  `deformitytype_backup_json` json DEFAULT NULL,
  `deformitytype_backup` text COMMENT '残疾类型归档',
  `history_disease_backup_json` json DEFAULT NULL,
  `history_disease_backup` text COMMENT '疾病史归档',
  `history_drug_backup_json` json DEFAULT NULL,
  `history_drug_backup` text COMMENT '用药史归档',
  `history_allergy_backup` text COMMENT '过敏史归档',
  `history_operation_backup` text COMMENT '手术史归档',
  `history_bloodtrans_backup` text COMMENT '输血史归档',
  `history_injury_backup` text COMMENT '外伤史归档',
  `history_familydisease_backup` text COMMENT '家族疾病史归档',
  `history_geneticdisease_backup` text COMMENT '遗传史归档',
  `isvalid` char(1) NOT NULL DEFAULT '1' COMMENT '是否可用',
  `sts` char(1) NOT NULL DEFAULT '1' COMMENT '是否删除',
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `modify_id` bigint(20) DEFAULT NULL COMMENT '修改人',
  `modify_time` datetime DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(200) DEFAULT NULL COMMENT '备注',
  `height` varchar(20) DEFAULT NULL COMMENT '身高',
  `weight` varchar(20) DEFAULT NULL COMMENT '体重',
  `identity` varchar(50) DEFAULT NULL COMMENT '身份证号',
  `telephone` varchar(50) DEFAULT NULL COMMENT '固定电话',
  `service_id` bigint(20) DEFAULT NULL COMMENT '服务order_id',
  `china_birthday` varchar(50) DEFAULT NULL COMMENT '农历生日',
  `user_service_id` bigint(20) DEFAULT NULL COMMENT '服务id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3835 DEFAULT CHARSET=utf8 COMMENT='客户历史档案';

2、插入相关数据

INSERT INTO `guns_uts_hs`.`cus_history`(`id`, `customer_id`, `name`, `sex`, `sex_name`, `birthday`, `birtydaytype`, `birtydaytype_name`, `age`, `nation`, `nation_name`, `religion`, `religion_name`, `phone`, `marriage`, `marriage_name`, `service_gradation`, `service_gradation_name`, `occupation`, `occupation_name`, `education`, `education_name`, `blood`, `blood_name`, `blood_rh`, `blood_rh_name`, `kind`, `kind_name`, `gradation`, `gradation_name`, `register_addr`, `contact_addr`, `address_backup`, `relations_backup`, `allowancetype_backup`, `medicaltype_backup`, `deformitytype_backup_json`, `deformitytype_backup`, `history_disease_backup_json`, `history_disease_backup`, `history_drug_backup_json`, `history_drug_backup`, `history_allergy_backup`, `history_operation_backup`, `history_bloodtrans_backup`, `history_injury_backup`, `history_familydisease_backup`, `history_geneticdisease_backup`, `isvalid`, `sts`, `create_id`, `create_time`, `modify_id`, `modify_time`, `remark`, `height`, `weight`, `identity`, `telephone`, `service_id`, `china_birthday`, `user_service_id`) VALUES (3832, 53543, 'Object', '01', '男', '2017-09-02', '02', '阳历', '2', '01', '汉族', '03', '佛教', '18595921011', '01', '已婚', '1000', '轻度依赖', '01', '国家机关、党群组织、企业、事业单位负责人', '01', '研究生', '01', 'A型', '01', '阴性', NULL, NULL, NULL, NULL, '河南省信阳市平桥区', '杭州市下城区西湖文化广场', NULL, '[{\"contactnumber\":\"18598961010\",\"name\":\"小黑\",\"relationtype\":\"06\",\"relationtypeName\":\"弟弟\",\"remark\":\"0\"},{\"contactnumber\":\"18598971010\",\"name\":\"小白\",\"relationtype\":\"05\",\"relationtypeName\":\"哥哥\",\"remark\":\"0\"},{\"contactnumber\":\"18597981010\",\"name\":\"小明\",\"relationtype\":\"09\",\"relationtypeName\":\"儿子\",\"remark\":\"1\"}]', '{\"allowance\":\"01\",\"allowanceName\":\"国家定期抚恤补助优抚对象\"}', '{\"isdefault\":\"1\",\"medicalvalue\":\"城镇职工基本医疗保险\"}', NULL, '[]', NULL, '[{\"diseasename\":\"糖尿病\",\"isdefault\":\"1\"},{\"diseasename\":\"冠心病\",\"isdefault\":\"1\"},{\"diseasename\":\"慢性阻塞性肺病\",\"isdefault\":\"1\"}]', NULL, '[]', '[{\"drugname\":\"青霉素\",\"isdefault\":\"1\"},{\"drugname\":\"磺胺\",\"isdefault\":\"1\"}]', '[{\"operationdate\":\"2019-11-01\",\"operationname\":\"肠胃炎手术\"}]', '[{\"historyname\":\"二次输血的\",\"modifyId\":225,\"transdate\":\"2019-11-01\"}]', '[{\"historyname\":\"破皮流血\",\"injurydate\":\"2019-11-01\"}]', '[{\"diseasename\":\"糖尿病\",\"isdefault\":\"1\",\"relationtype\":\"01\",\"relationtypeName\":\"父亲\"},{\"diseasename\":\"脑卒中\",\"isdefault\":\"1\",\"relationtype\":\"01\",\"relationtypeName\":\"父亲\"},{\"diseasename\":\"冠心病\",\"isdefault\":\"1\",\"relationtype\":\"02\",\"relationtypeName\":\"母亲\"},{\"diseasename\":\"慢性阻塞性肺病\",\"isdefault\":\"1\",\"relationtype\":\"02\",\"relationtypeName\":\"母亲\"},{\"diseasename\":\"慢性阻塞性肺病\",\"isdefault\":\"1\",\"relationtype\":\"03\",\"relationtypeName\":\"兄弟姐妹\"},{\"diseasename\":\"恶性肿瘤\",\"isdefault\":\"1\",\"relationtype\":\"03\",\"relationtypeName\":\"兄弟姐妹\"},{\"diseasename\":\"肝炎\",\"isdefault\":\"1\",\"relationtype\":\"04\",\"relationtypeName\":\"子女\"},{\"diseasename\":\"结核病\",\"isdefault\":\"1\",\"relationtype\":\"04\",\"relationtypeName\":\"子女\"}]', '[{\"createTime\":\"2019-11-02\",\"diseasename\":\"开心病\",\"index\":1}]', '1', '1', 225, '2019-11-02 11:31:15', 225, '2019-11-02 11:31:15', NULL, '', '', '000000201709020012', NULL, 254790, '2017年七月十二', 40558);

二、执行json_extract()

1、使用json_extract()来处理数据

2、使用方式

  • $ . paramsName:取出一个key对应的value。
  • $ **.paramsName$ .[*].paramsName:取出json数组所有该字段key对应的value并以,的方式拼接在一起

MySql中json_extract函数的一个特殊之处

MySql自5.7之后开始支持json类型,相应的解析函数主要是json_extract(与操作符“->”等效)。

不过与其它数据库的类似函数(如oradle的json_value)相比,当json的值是字符类型时,json_extract的结果略有不同。

在MySql中,是这样的

而在Oracle中,是这样的

可见,差别在于MySql的json_extract的返回值会带上两个双引号。

而当json的值是数值型时,没有差别。

为保持各种情况下的一致,在MySql中要解析json,还需再加上json_unquote函数以去掉双引号:

json_unquote(json_extract())的等效操作符是“->>”。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MySql中的json_extract函数处理json字段详情

    目录 前言 1. 使用方式 2. 使用演示 3. 小结 前言 在db中存储json格式的数据,相信大家都或多或少的使用过,那么在查询这个json结构中的数据时,有什么好的方法么?取出String之后再代码中进行解析? 接下来本文将介绍一下Mysql5.7+之后提供的json_extract函数,可以通过key查询value值 1. 使用方式 数据存储的数据是json字符串,类型为我们常用的varchar即可 语法: JSON_EXTRACT(json_doc, path[, path] -) 若

  • 关于mysql中的json解析函数JSON_EXTRACT

    目录 mysql json解析函数JSON_EXTRACT 例子 mysql5.7 json格式与json_extract方法 数据初始化 select语句 返回结果解析 用法解析 mysql json解析函数JSON_EXTRACT MYSQl自带的解析函数JSON_EXTRACT,用JSON_EXTRACT函数解析出来的函数会包含双引号 例子 t_table表里面source字段是以json格式写的值为 { "info" : { "color" : "

  • mysql 如何使用JSON_EXTRACT() 取json值

    目录 mysql取json字符串字段下的某个键的值 1.使用replace()做替换 2.使用 JSON_UNQUOTE() mysql处理json字符串,JSON_EXTRACT()提取内容 MySQL自5.7之后开始支持json类型 mysql取json字符串字段下的某个键的值 要求:mysql版本5.7及以上 SELECT JSON_EXTRACT('{"uid":"asas02234"}', "$.uid"); 由于json的键值是带双引

  • MySQL中json_extract()函数的使用实例

    目录 MySQL中json_extract()函数的使用 一.初始化 二.执行json_extract() MySql中json_extract函数的一个特殊之处 在MySql中,是这样的 而在Oracle中,是这样的 MySQL中json_extract()函数的使用 作用:截取数据库中指定字段中存储的json数据中的某个字段对应的值 要做做什么?(根据数据库中相关表字段中存储的json格式的数据,然后以SQL语句的形式取出其中指定key对应的值,最终整理汇总为一张视图供以后的方便使用) 一.

  • MySQL中json_extract函数说明及使用方式

    目录 1. json_extract 使用场景说明 2. MySQL json_extract 函数简介 2.1 函数简介 2.2 使用方式 2.3 注意事项 3. 数据验证 3.1 提取普通json中的值 3.2 提取json数组的值 总结 1. json_extract 使用场景说明 在日常业务开发中通常mysql数据库中某个字段会需要存储json格式字符串,查询的时候有时json数据较大,每次全部取出再去解析查询效率较低,也较麻烦. 好在Mysql5.7及之后的版本里提供了json_ext

  • MySQL中sum函数使用的实例教程

    文章简介 今天分享一下MySQL中的sum函数使用.该函数已经成为大家操作MySQL数据库中时常用到的一个函数,这个函数统计满足条件行中指定列的和,想必肯定大家都知道了,本身就没什么讲头了,这篇文章主要是通过几个小案例深入了解一下该函数,以及在做MySQL查询时如何使用sum函数做优化. 语法分析 SUM([DISTINCT] expr) [over_clause] Returns the sum of expr. If the return set has no rows, SUM() ret

  • Sql Server中Substring函数的用法实例解析

    SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分.这个函数的名称在不同的资料库中不完全一样: MySQL: SUBSTR( ), SUBSTRING( ) Oracle: SUBSTR( ) SQL Server: SUBSTRING( ) SQL 中的 substring 函数是用来截取一个栏位资料中的其中一部分. 例如,我们需要将字符串'abdcsef'中的'abd'给提取出来,则可用substring 来实现: select substring('abdcsef'

  • MySQL中group_concat函数深入理解

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 |

  • MySQL中ROUND函数进行四舍五入操作陷阱分析

    本文实例讲述了MySQL中ROUND函数进行四舍五入操作陷阱.分享给大家供大家参考,具体如下: 在MySQL中, ROUND 函数用于对查询结果进行四舍五入,不过最近使用ROUND函数四舍五入时意外发现并没有预期的那样,本文将这一问题记录下来,以免大家跟我一样犯同样的错误. 问题描述 假如我们有如下一个数据表 test ,建表语句如下 CREATE TABLE test ( id int(11) NOT NULL AUTO_INCREMENT, field1 bigint(10) DEFAULT

  • 详解MySQL中concat函数的用法(连接字符串)

    MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串. 一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQ

  • 浅谈MySQL中group_concat()函数的排序方法

    group_concat()函数的参数是可以直接使用order by排序的.666.. 下面通过例子来说明,首先看下面的t1表. 比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高到底排序. 可以这样写: SELECT username,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM t1 GROUP BY username; 效果如下: 以上这篇浅谈MySQL中group_concat()函数的排序方法就

  • 浅谈mysql中concat函数,mysql在字段前/后增加字符串

    MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串. 一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQ

  • python中set()函数简介及实例解析

    set函数也是python内置函数的其中一个,属于比较基础的函数.其具体介绍和使用方法,下面进行介绍. set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. set,接收一个list作为参数 list1=[1,2,3,4] s=set(list1) print(s) #逐个遍历 for i in s: print(i) 输出: set([1, 2, 3, 4]) 1 2 3 4 使用add(key)往集合中添加元素,重复的元素自动过滤 list1

随机推荐