【mysql】mysql5.7支持的json字段查询【mybatis】
mysql5.7支持的json字段查询
参考:https://www.cnblogs.com/ooo0/p/9309277.html
参考:https://www.cnblogs.com/pfdltutu/p/9019444.html
使用示例:
存储结构如下:
1.以json字段作为查询条件:[json字段全部是JSONObject类型的]
- SELECT
- *
- FROM
- worksheet_data_table_data w
- WHERE
- w.val -> '$.input_0' LIKE '%0%'
查询结果:
2.判断JSON字段,是JSONObject类型还是JSONArray类型
- SELECT
- w.val,
- JSON_TYPE( w.val )
- FROM
- worksheet_data_table_data w
查询结果:
3.查询JSON字段是 Array的JSON类型的
- SELECT
- w.val,
- JSON_TYPE( w.val )
- FROM
- worksheet_data_table_data w
- where
- JSON_TYPE(w.val) = 'ARRAY'
查询结果:
4.以json字段为查询条件[查询JSONArray]类型 [like查询]
- SELECT
- *
- FROM
- worksheet_data_table_data w
- WHERE
- w.val -> '$[*].*' LIKE '%峰%'
解释:
- w.val -> '$[*].*' LIKE '%峰%'
- 1.w.val字段是JSON数组[无所谓JSONObject还是JSONArray]
- [反正如果按照对象查,那数组是匹配不到的]
- [反之,如果按照数组查,对象也是匹配不到的]
- 2.'$[*].*'
- 代表查询JSONArray 数组格式的JSON字符串中,
- 第一个* 代表任意下标
- 第二个* 代表任意属性
- 3.LIKE '%峰%'
- 匹配条件和正常sql 查询条件一样 写
查询结果如下:
5.以json字段为查询条件[查询JSONArray]类型 [=查询]
等于查询不同于like的查询,需要在外面包裹一层JSON_CONTAINS()
比如数据集如下:
想要 查询 出 name字段 既等于"亚瑟" 又等于"jj"的json字段
- SELECT
- id,
- `dept-user_0`
- FROM
- worksheet_data_30 d
- WHERE
- JSON_CONTAINS( d.`dept-user_0`->'$[*].name' , '"jj"', '$')
- AND
- JSON_CONTAINS( d.`dept-user_0`->'$[*].name' , '"亚瑟"', '$')
查询结果如下:
6.以json字段为查询条件[查询JSONObject]类型 [包含特殊符号的KEY的查询,应使用" "双引号扩住]
json字段值如下格式:
- {
"input_0":"lio",
"textarea_0":"多行文本",
"input-number_0":"17",
"date_0":"2019-08-07 09:33:06",
"select_0":",张三,李四,王五,",
"area_0":"qwdq4d8q4d8q4wd4",
"location_0":"48444",
"file_0":"451515151",
"dept-user_0":"[{\"id\":\"1\",\"name\":\"jz\"},{\"id\":\"2\",\"name\":\"盖伦\"},{\"id\":\"3\",\"name\":\"jj\"}]",
"dept-base_0":"[{\"id\":\"1\",\"name\":\"pj\"},{\"id\":\"2\",\"name\":\"游侠\"},{\"id\":\"3\",\"name\":\"jj\"}]"
}
查看正常字段,可以这么写:
- SELECT
- val,
- val -> '$.input_0'
- FROM
- worksheet_data_table_data
- WHERE
- val -> '$.input_0' like '%o%'
在对于数据库非JSON字段的列名查询,如果有特殊符号的,可以使用``扩住,例如:
- SELECT
- `col_name`,
- val
- FROM
- worksheet_data_table_data
- WHERE
- `col_name` = 'table_0'
但在查询JSON字段时候,指定key时有特殊符号,就不能使用`` 反单引号扩住了,而应该采用""双引号 扩住KEY查询:
错误写法:
- SELECT
- val,
- val -> '$.`dept-user_0`'
- FROM
- worksheet_data_table_data
- WHERE
- val -> '$.`dept-user_0`' like '%盖伦%'
报错:Invalid JSON path expression. The error is around character position 15.
正确写法:
- SELECT
- val,
- val -> '$."dept-user_0"'
- FROM
- worksheet_data_table_data
- WHERE
- val -> '$."dept-user_0"' like '%盖伦%'
结果:
7.以json字段为查询条件[查询JSONObject]类型 [key:value value是时间 的 时间区间和=查询]
【注意:】
对于JSON字符串中的时间格式的存储,需要统一格式,要么都是"%Y-%m-%d" , 要么都是“%Y-%m-%d %H:%i:%s” 或者其他,但只有保证时间存入的格式是一致的,
才能使用 字符串转时间的函数 ,按照统一的时间格式 进行转化,否则转换不成功,即不能准确查询出结果。
STR_TO_DATE(val -> '$.date_0','"%Y-%m-%d %H:%i:%s"')
对于时间的区间查询:[需要在区间结束时间往后算1天,这样才能保证查询的准确性]
- SELECT
- val,
- val -> '$."date_0"'
- FROM
- worksheet_data_table_data
- WHERE
- STR_TO_DATE(val -> '$.date_0','"%Y-%m-%d %H:%i:%s"') between '2019-08-07 10:33:06' AND date_add('2019-08-08', interval 1 day)
对于时间的=查询:[其实也是用between and,只不过,区间结束时间往后算1天,这样得到的就是今天到明天之前的所有时间数据]
- SELECT
- val,
- val -> '$."date_0"'
- FROM
- worksheet_data_table_data
- WHERE
- STR_TO_DATE(val -> '$.date_0','"%Y-%m-%d %H:%i:%s"') between '2019-08-07 10:33:06' AND date_add('2019-08-07', interval 1 day)
8.以json字段为查询条件[查询JSONObject]类型 [key:value value是数值 的 数值的 区间和=查询]
数值的区间查询【between 或者 > < 都可以】
- SELECT
- val,
- val -> '$."input-number_0"',
- CAST(val -> '$."input-number_0"' AS DECIMAL(18,3))
- FROM
- worksheet_data_table_data
- WHERE
- CAST(val -> '$."input-number_0"' AS DECIMAL(18,3)) between 16 and 18
- SELECT
- val,
- val -> '$."input-number_0"',
- CAST(val -> '$."input-number_0"' AS DECIMAL(18,3))
- FROM
- worksheet_data_table_data
- WHERE
- CAST(val -> '$."input-number_0"' AS DECIMAL(18,3)) >16.3
数值=查询
- SELECT
- val,
- val -> '$."input-number_0"',
- CAST(val -> '$."input-number_0"' AS DECIMAL(18,3))
- FROM
- worksheet_data_table_data
- WHERE
- CAST(val -> '$."input-number_0"' AS DECIMAL(18,3)) =16
【mysql】mysql5.7支持的json字段查询【mybatis】的更多相关文章
- mysql 和mssql2016中的json字段相关操作
Mysql: mysql中有专门的Json字段,不是通用的varchar字段,可以保存key/value对,也可保存value集合. 可以增加.删除.修改Json中的某一字段,查询时可以为条件. 如果 ...
- mysql5.7 新增的json字段类型
一.我们先创建一个表,准备点数据 CREATE TABLE `json_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'I ...
- mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?
需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...
- MySQL中JSON字段的使用技巧
mysql5.7.8之后开始原生支持json. 在类似mongodb这种nosql数据库中,json存储数据是非常自然的, 在mysql中合理的使用json,能够带来极大的便利 Json字段的使用场景 ...
- mysql json字段
从 MySQL 5.7.8 开始,MySQL 支持原生的 JSON 数据类型. 一. 创建json(不可以设置长度,可以是null,不能用有默认值) mysql> CREATE TABLE ...
- MySQL全文索引、联合索引、like查询、json查询速度大比拼
目录 查询背景 一.like查询 二.json函数查询 三.联合索引查询 四.全文索引查询 结论 查询背景 有一个表tmp_test_course大概有10万条记录,然后有个json字段叫outlin ...
- Mysql JSON字段提取某一个属性值的函数
mysql从5.7开始才支持JSON_EXTRACT等 JSON相关的函数, 项目里用到的mysql是5.6的,需要提取JSON字段里某一个属性值进行统计, 自己写了一个笨的提取方法: CREATE ...
- mysql update不支持子查询更新
先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...
- 关于JSON 字段数据的直接查询
最新的pgSQL 对json的支持在进一步加强!虽然我也学了那么点皮毛,但是json数据对于WEB的开发确实很重要,苦苦学习了很长一段时间,不断的关系PGSQL的动向! 好在翻看很多高人的例子和介绍, ...
随机推荐
- 轻量级.Net ORM SqlSuger项目实战
SqlSuger,清垃圾ORM实战例子. //添加引用 using SqlSugar; //在构造函数中实例化SqlSuger clinet = new SqlSugarClient(new Conn ...
- nginx 日志问题(\x22)
nginx 日志问题(\x22) 问题: 1.request_body中含有中文时,nginx日志会转换为十六进制. 2.nginx记录问题 POST /xxxxx HTTP/1.1|200|4266 ...
- ActiveMQ消息可靠性-事物
事物偏生产者,签收偏消费者 设置为true,需要手动提交 设置为false,自动提交 使用手动提交的好处就是可以回滚,当整个事物提交时,里面的某条失败了,可以事物回滚,于是保证了数据的一致性 ...
- 仿照addCleanup 在unittest中清理addSetupclass资源
addCleanup的用例这里不介绍了,可以看我的另一编文章: python unittest框架中addCleanup函数详解 但如果有下面这种场景,还是会遗留大批理资源 在setUpClass注入 ...
- Comet OJ 夏季欢乐赛 距离产生美
距离产生美 https://cometoj.com/contest/59/problem/B?problem_id=2680 题目描述 JWJU放暑假了,于是鸡尾酒就和女朋友璇璇一起出去玩.但是外面太 ...
- JS中把其他类型转换成字符串的三种方法
1.toString()方法 toString()方法返回的是相应值的字符串表现 数值.布尔值.对象和字符串值都有toString()方法,但是null和undefined值没有这个方法 例子: va ...
- 2.1 自动内存管理机制--Java内存区域与内存溢出异常
自动内存管理机制 第二章.Java内存区域与内存溢出异常 [虚拟机中内存如何划分,以及哪部分区域.什么样代码和操作会导致内存溢出.各区域内存溢出的原因] 一.运行时数据区域 Java虚拟机所管理的内存 ...
- Excel-自定义单元格、填充柄
数据分析是指用适当的统计分析方法对收集来的大量数据进行分析, 提取有用信息和形成结论而对数据加以详细研究和概括总结的过程. 工具:EXCEL,sql,SAS,SPSS,R,Python.Hadoop. ...
- 26 配置TensorFlow 1.9
https://www.ctolib.com/topics-133854.html sudo apt install libatlas-base-dev pip3 install tensorflow ...
- EasyUI前后端分离
陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色.Vs前后端分离 美工 ...