MySQL常用Json函数
来源:http://www.cnblogs.com/waterystone/p/5626098.html;
1. 概述
MySQL里的json分为json array和json object。 $表示整个json对象,在索引数据时用下标(对于json array,从0开始)或键值(对于json object,含有特殊字符的key要用"括起来,比如$."my name")。
例如:[3, {"a": [5, 6], "b": 10}, [99, 100]],那么:
$[0]:3
$[1]: {"a": [5, 6], "b": 10}
$[2] :[99, 100]
$[3] : NULL
$[1].a:[5, 6]
$[1].a[1]:6
$[1].b:10
$[2][0]:99
2. 比较规则
json中的数据可以用 =, <, <=, >, >=, <>, !=, and <=> 进行比较。但json里的数据类型可以是多样的,那么在不同类型之间进行比较时,就有优先级了,高优先级的要大于低优先级的(可以用JSON_TYPE()函数查看类型)。优先级从高到低如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
3. 常用函数
3.1 创建函数
3.1.1 JSON_ARRAY
JSON_ARRAY(val1,val2,val3...)
生成一个包含指定元素的json数组。
1 2 3 4 5 6 |
|
3.1.2 JSON_OBJECT
JSON_OBJECT(key1,val1,key2,val2...)
生成一个包含指定K-V对的json object。如果有key为NULL或参数个数为奇数,则抛错。
1 2 3 4 5 6 |
|
3.1.3 JSON_QUOTE
JSON_QUOTE(json_val)
将json_val用"号括起来。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
3.1.4 CONVERT
CONVERT(json_string,JSON)
1 2 3 4 5 6 |
|
3.2 查询函数
3.2.1 JSON_CONTAINS
JSON_CONTAINS(json_doc, val[, path])
查询json文档是否在指定path包含指定的数据,包含则返回1,否则返回0。如果有参数为NULL或path不存在,则返回NULL。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
3.2.2 JSON_CONTAINS_PATH
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
查询是否存在指定路径,存在则返回1,否则返回0。如果有参数为NULL,则返回NULL。
one_or_all只能取值"one"或"all",one表示只要有一个存在即可;all表示所有的都存在才行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
3.2.3 JSON_EXTRACT
JSON_EXTRACT(json_doc, path[, path] ...)
从json文档里抽取数据。如果有参数有NULL或path不存在,则返回NULL。如果抽取出多个path,则返回的数据封闭在一个json array里。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
在MySQL 5.7.9+里可以用"->"替代。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
在MySQL 5.7.13+,还可以用"->>"表示去掉抽取结果的"号,下面三种效果是一样的:
- JSON_UNQUOTE( JSON_EXTRACT(column, path) )
- JSON_UNQUOTE(column -> path)
- column->>path
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
3.2.4 JSON_KEYS
JSON_KEYS(json_doc[, path])
获取json文档在指定路径下的所有键值,返回一个json array。如果有参数为NULL或path不存在,则返回NULL。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
3.2.5 JSON_SEARCH
JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])
查询包含指定字符串的paths,并作为一个json array返回。如果有参数为NUL或path不存在,则返回NULL。
one_or_all:"one"表示查询到一个即返回;"all"表示查询所有。
search_str:要查询的字符串。 可以用LIKE里的'%'或‘_’匹配。
path:在指定path下查。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
|
3.3 修改函数
3.3.1 JSON_APPEND/JSON_ARRAY_APPEND
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
在指定path的json array尾部追加val。如果指定path是一个json object,则将其封装成一个json array再追加。如果有参数为NULL,则返回NULL。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
3.3.2 JSON_ARRAY_INSERT
JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)
在path指定的json array元素插入val,原位置及以右的元素顺次右移。如果path指定的数据非json array元素,则略过此val;如果指定的元素下标超过json array的长度,则插入尾部。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
3.3.3 JSON_INSERT/JSON_REPLACE/JSON_SET
JSON_INSERT(json_doc, path, val[, path, val] ...)
在指定path下插入数据,如果path已存在,则忽略此val(不存在才插入)。
1 2 3 4 5 6 7 |
|
JSON_REPLACE(json_doc, path, val[, path, val] ...)
替换指定路径的数据,如果某个路径不存在则略过(存在才替换)。如果有参数为NULL,则返回NULL。
1 2 3 4 5 6 7 |
|
JSON_SET(json_doc, path, val[, path, val] ...)
设置指定路径的数据(不管是否存在)。如果有参数为NULL,则返回NULL。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
3.3.4 JSON_MERGE
JSON_MERGE(json_doc, json_doc[, json_doc] ...)
merge多个json文档。规则如下:
- 如果都是json array,则结果自动merge为一个json array;
- 如果都是json object,则结果自动merge为一个json object;
- 如果有多种类型,则将非json array的元素封装成json array再按照规则一进行mege。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
3.3.5 JSON_REMOVE
JSON_REMOVE(json_doc, path[, path] ...)
移除指定路径的数据,如果某个路径不存在则略过此路径。如果有参数为NULL,则返回NULL。
1 2 3 4 5 6 7 |
|
3.3.6 JSON_UNQUOTE
JSON_UNQUOTE(val)
去掉val的引号。如果val为NULL,则返回NULL。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
3.4 JSON特性查询
3.4.1 JSON_DEEPTH
JSON_DEPTH(json_doc)
获取json文档的深度。如果参数为NULL,则返回NULL。
空的json array、json object或标量的深度为1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
3.4.2 JSON_LENGTH
JSON_LENGTH(json_doc[, path])
获取指定路径下的长度。如果参数为NULL,则返回NULL。
长度的计算规则:
- 标量的长度为1;
- json array的长度为元素的个数;
- json object的长度为key的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
3.4.3 JSON_TYPE
JSON_TYPE(json_val)
获取json文档的具体类型。如果参数为NULL,则返回NULL。
3.4.4 JSON_VALID
JSON_VALID(val)
判断val是否为有效的json格式,是为1,不是为0。如果参数为NUL,则返回NULL。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
MySQL常用Json函数相关推荐
- MySQL常用时间函数
本文转自:http://www.2cto.com/database/201307/230943.html MySQL常用时间函数 1.1 获得当前日期+时间(date + time)函数:now() ...
- mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数
<Mysql实例详解Mysql中的JSON系列操作函数>要点: 本文介绍了Mysql实例详解Mysql中的JSON系列操作函数,希望对您有用.如果有疑问,可以联系我们. MYSQL必读前言 ...
- MySQL常用类型转换函数总结
MySQL函数,常用类型转换函数总结 1.Concat函数. 连接字符串常用:concat函数.如sql查询条件的like查询, AND c.name like concat(#{param.name ...
- mysql的json函数
mysql5.7以上提供了一种新的字段格式json,大概是mysql想把非关系型和关系型数据库一口通吃,所以推出了这种非常好用的格式,这样,我们的很多基于mongoDb或者clickHouse的业务都 ...
- mysql 常用聚合函数总结
前言 聚合函数在工作中大量使用,比如常用的 sum求和函数,avg求平均值的函数等,本篇将mysql聚合函数相关的知识点做一些完整的总结: 数据准备 提前创建一张部门表和员工表,并插入若干数据 CRE ...
- mysql常用转换函数_MySQL中常用转换函数介绍
Cast函数:CONVERT函数. 用法:CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name). ...
- mysql常用的函数--group_concat
mysql的常用函数--分组连接字段函数 group_concat 使用方法:select name `names`,GROUP_CONCAT(color) colors from group_co ...
- mysql常用的函数
1.IF(expr1,expr2,expr3)函数: 如果 expr1 是TRUE ,则 IF()的返回值为expr2; 否则返回值则为 expr3. IF() 的返回值为数字值或字符串值,具体情况视 ...
- mysql常用系统函数归类
数学函数 函数 作用 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) EXP(x) 返回值e(自然对数的底)的x次方 GREATEST(x1,x2, ...
最新文章
- iOS朋友圈,视频播放器、钓鱼小游戏、玻璃动画源码
- 程序员的弓箭知识涉猎
- 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】
- MySQL 8.0索引合并
- 内存超频trfc_这只是开始?四款DDR4内存超频效果对比
- ubuntu LVS+keepalived 笔记
- 微信之微信支付(封装)--jsapi
- [C#复习向整合]反射 -Assembly与Activator
- Python 与金融科技6|上证50的收盘价汇总
- 查找DOM,受控与非受控组件
- python多个箱线图_python-matplotlib | 箱线图及解读
- vue组件可视化_Vue HTML5音频可视化组件
- 前端面试题【131道】
- 我是怎么看friends练口语的(转贴)
- 困在赛博世界里的“仿生机器人”
- Qt linguist
- 数据结构实验一,第2题:基于顺序存储结构的图书信息表的排序
- linux复制jar文件,linux如何将界面上的一个JAR文件拷贝到ROOT下啊
- 用Bootstrap实现搜索select下拉框:bootstrap-select
- Thinking in Java----------并发篇章
热门文章
- LOJ6435【PKUSC2018】星际穿越题解(贪心+倍增)
- 双重for循环打印星号矩形,平行四边形,三角形规律总结
- Android代码规范_持续更新
- Flutter 根据图标工场网站 更改Android ios 桌面Logo
- 创建用户桌面进程(突破Session 0隔离)
- 如何禁用烦人的“insert”键
- Java验证码及登录中的漏洞分析
- 华为OD机试 - 几何平均值最大子数组(Java JS Python)
- 为何SAP适合纺织行业解决方案
- 「Bug」问题分析 RuntimeError: CUDA error: device-side assert triggered