SQL--查询JSON、时间、字符串的高级用法
SQL--查询JSON、时间、字符串的高级用法
本文章总结SQL的JSON、时间格式、字符串判断转换的使用。核心点还是在于Json字段的提取(1.5)、时间的比较(2.2,2.3)以及字符串的查询(3.1),其他都算是优化和补充点。
@
1.SQL--JSON使用
解释一下为什么SQL要用到JSON存储和查询,因为很多时候前端展示内容或者后端存储无用字段过多,所以没必要后台新建太多字段。并且为了方便项目上线后快速排查问题反馈解决办法给用户,故而引入了JSON来存储和查询,实际开发中库表字段设计成JSON的情况也比较多。
先给出基本建库查询操作
# SQL--建库
CREATE TABLE t_base_info (
id BIGINT NOT NULL PRIMARY KEY auto_increment,
content json
);
# SQL--入库
INSERT INTO t_base_info (content)
VALUES
(
'{
"author": "huyuqiao-A",
"blog": "https://www.cnblogs.com/meditation5201314/",
"content": [
{"name": "Empirefree-01",
"age": 18
},
{"name": "Empirefree-02",
"age": 19
},
{"name": "Empirefree-03",
"age": 19
}
]
}'
);
1.1.JSON_ARRAY--转成数组
# SQL--查询
# json--对象转数组
select json_array(content) from t_base_info
1.2.JSON_OBJECT--转成json对象
#json--对象转json格式--自定义
select json_object('name', 'huyuqiao', 'age', '18', 'profession','Java开发工程师')
1.2.JSON_QUOTE--转成json
#json--引用字符串作为json值
select json_quote('"huyuqiao"')
1.3.JSON_MERGE--合并json
#json--合并字符串
select json_merge('{"blog": "www.baidu.com"}', '{"name":"huyuqiao"}')
1.4.JSON_VALID--判断是否为json
#json--判断json格式是否有效--0 表示无效,1 表示有效,NUll 表示参数为null
select json_valid("huyuqiao"), json_valid('"huyuqiao"'), json_valid(null)
1.5.JSON_EXTRACT--提取json(重点*)
#json--查询json内容(重点)
SELECT
JSON_EXTRACT(content, '$.blog' ) AS '个人博客',
JSON_EXTRACT(content, '$.content' ) AS '个人信息'
FROM
t_base_info
1.6.JSON完整内容
官方文档:https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html
官网上给的语句很多,我挑的是比较常用的几个,主要还是JSON_EXTRACT
用的很常见
分类 | 函数 | 描述 |
---|---|---|
创建json | json_array | 创建json数组 |
json_object | 创建json对象 | |
json_quote | 将json转成json字符串类型 | |
查询json | json_contains | 判断是否包含某个json值 |
json_contains_path | 判断某个路径下是否包json值 | |
json_extract | 提取json值 | |
column->path | json_extract的简洁写法,MySQL 5.7.9开始支持 | |
column->>path | json_unquote(column -> path)的简洁写法 | |
json_keys | 提取json中的键值为json数组 | |
json_search | 按给定字符串关键字搜索json,返回匹配的路径 | |
修改json | json_append | 废弃,MySQL 5.7.9开始改名为json_array_append |
json_array_append | 末尾添加数组元素,如果原有值是数值或json对象,则转成数组后,再添加元素 | |
json_array_insert | 插入数组元素 | |
Json_insert | 插入值(插入新值,但不替换已经存在的旧值) | |
json_merge | 合并json数组或对象 | |
json_remove | 删除json数据 | |
json_replace | 替换值(只替换已经存在的旧值) | |
json_set | 设置值(替换旧值,并插入不存在的新值) | |
json_unquote | 去除json字符串的引号,将值转成string类型 | |
返回json属性 | json_depth | 返回json文档的最大深度 |
json_length | 返回json文档的长度 | |
json_type | 返回json值得类型 | |
json_valid | 判断是否为合法json文档 |
2.SQL--时间计算比较
SQL里面最常见的就是时间的查询比较了,下面列出自己平时用的比较多的SQL时间比较
2.1.时间--添加、减少
#现在时间增加1分钟
SELECT date_add(now(), interval 1 HOUR_MINUTE)
#现在时间减少1分钟
SELECT date_sub(now(), interval 1 HOUR_MINUTE)
2.2时间格式转换
#时间格式转换--年月日 时分秒
select DATE_FORMAT(now(), '%Y-%m-%d')
select DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s')
2.3统计本年/本月/本周/本日(重点*)
SQL时间比较中最多的应该就是统计本年/本月/本周/本日的时间了
#统计本年/本月/本周/本日数据
#注:这里统计本周的时候多个1是因为美国时间和中国时间不是一样的,需要进行校正,网上很多都没有校正
SELECT
now( ),
to_days( now( ) ),
YEARWEEK( date_format( now( ), '%Y-%m-%d' ), 1 ),
YEAR ( now( ) )
WHERE
to_days( now( ) ) = to_days( now( ) )
OR YEARWEEK( date_format( now( ), '%Y-%m-%d' ), 1 ) = YEARWEEK( now( ), 1 )
OR DATE_FORMAT( now( ), '%Y%m' ) = DATE_FORMAT( CURDATE( ), '%Y%m' )
OR YEAR ( now( ) ) = YEAR ( now( ) )
2.4 时间格式总结
注意:SQL时间如下这种
YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,MICROSECOND
而且类似这种interval '1 2 3 4'day_second
都是从右往左根据时间类型看,这种就是1天2小时3分钟4秒,比如如下这种
#比当前时间减少了1天2小时3分钟4秒
select now(), now() - interval '1 2 3 4' DAY_SECOND
#比当前时间减少了1分钟
select now(), now() - interval '1' HOUR_MINUTE
下面是SQL中时间的所有格式
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
3.SQL--字符串
3.1.Concat--模糊查询
select now() where now() like CONCAT('%', 'huyuqiao ','%')
3.2.locate--查找字符串
#子串在字符串中第一次出现索引(从1开始数,没找到则返回0)
select locate('qiao', 'huyuqiaoqiao')
3.3.If、Case、Round--优化显示与字段计算
下面这些是用于优化查询字段的,1可以改成table.column。
# 判断字段: Round(number,保留几位有效数字,默认四舍五入)
SELECT
IF
( 1 = 1, '是', '否' ) AS '状态',
CASE
1
WHEN 1 THEN
'扣款'
WHEN 2 THEN
'奖励'
WHEN 3 THEN
'投诉'
END 申请类型,
CONCAT( CASE 1 WHEN 1 THEN '-' WHEN 2 THEN '+' WHEN 3 THEN '-' END, ROUND( 200 / 100, 2 ) ) AS 金额
书山有路勤为径,学海无涯苦作舟。程序员不仅要懂代码,更要懂生活,关注我,一起进步。
SQL--查询JSON、时间、字符串的高级用法的更多相关文章
- sql查询关于时间的一些汇总
今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from 表名 where ...
- SQL 查询当前时间
Mysql: select date_format(now(),'%Y-%m-%d'); Oracle: Oracle中如何获取系统当前时间进行语句的筛选是SQL语句的常见功能 获取系统当前时间dat ...
- python3 f-string格式化字符串的高级用法
从Python 3.6开始,f-string是格式化字符串的一种很好的新方法.与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在Python 3.6之前,有两种将Python表 ...
- SQL获取某个时间字符串里的月和日,获取某天是周几
select datename(weekday,'2016-11-4') as '周' select convert(varchar,datepart(month,'2016-11-4')) as ' ...
- ACCESS与MSSQL比较:SQL语句关于时间格式使用的注意点
ACCESS与MSSQL比较:SQL语句关于时间字符串的使用:ACCESS数据库使用 # 来控制时间格式字符串:mssql数据库使用单引号 ' 来控制时间格式字符串.例: ACCESS版本:UPDAT ...
- SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法
create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...
- Newtonsoft.Json高级用法,json序列号,model反序列化,支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity,字符串
原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口 ...
- SQL[连载3]sql的一些高级用法
SQL[连载3]sql的一些高级用法 SQL 高级教程 SQL SELECT TOP SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目. SELECT TOP ...
- redis的Linux系统安装与配置、redis的api使用、高级用法之慢查询、pipline事物
今日内容概要 redis 的linux安装和配置 redis 的api使用 高级用法之慢查询 pipline事务 内容详细 1.redis 的linux安装和配置 # redis 版本选择问题 -最新 ...
随机推荐
- 22、oracle子查询
22.1.什么是子查询: 1.子查询就是在一条sql语句中嵌入select语句: 2.子查询可区分为关联子查询和非关联子查询,他们和主查询之间的执行顺序和关系是不同的: 22.2.关联子查询: 1.说 ...
- 重新整理 .net core 实践篇————网关中的身份签名认证[三十七]
前言 简单整理一下网关中的jwt,jwt用于授权认证的,其实关于认证授权这块https://www.cnblogs.com/aoximin/p/12268520.html 这个链接的时候就已经写了,当 ...
- Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天 ...
- POJ 2826 An Easy Problem? 判断线段相交
POJ 2826 An Easy Problem?! -- 思路来自kuangbin博客 下面三种情况比较特殊,特别是第三种 G++怎么交都是WA,同样的代码C++A了 #include <io ...
- CRM企业管理系统一年多少钱?
CRM系统一年多少钱?这是很多企业管理者比较关心的问题.目前市面上的CRM系统分为本地部署型和云部署型.云部署型CRM费用相对较低,只需要按需购买账号,连接网络即可使用:本地部署型CRM费用较高,企业 ...
- 【转载】每天一个linux命令(11):nl命令
转载至:http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内 ...
- Java学习笔记之—Java基础
将学习到的JAVA基础用xmind记录了下来,需要原件的可以私信
- idea本地调式tomcat源码
前言 上篇文章中一直没搞定的tomcat源码调试终于搞明白了,p神的代码审计星球里竟然有,真的好b( ̄▽ ̄)d ,写一下过程,还有p神没提到的小坑 准备阶段 1.去官网下东西:https://tomc ...
- python操作elasticsearch增、删、改、查
最近接触了个新东西--es数据库 这东西虽然被用的很多,但我是前些天刚刚接触的,发现其资料不多,学起来极其痛苦,写个文章记录下 导入库from elasticsearch import Elastic ...
- 灵魂画手的零基础python教程1:关于Python学习的误区、python的优缺点、前景
滴~ 近段时间,因为工作项目的原因,阿菌要重拾起python这门语言了,所以顺势写一门python教程,精心的编排,配上漫画和视频,希望能帮助更多想接触编程的同学入门,课程将从基础语法开始讲起,和大家 ...