sql常用的字符串函数(SQL--查询JSON时间字符串的高级用法)

SQL--查询JSON、时间、字符串的高级用法,我来为大家科普一下关于sql常用的字符串函数?以下内容希望对你有帮助!

sql常用的字符串函数(SQL--查询JSON时间字符串的高级用法)

sql常用的字符串函数

SQL--查询JSON、时间、字符串的高级用法

本文章总结SQL的JSON、时间格式、字符串判断转换的使用。核心点还是在于Json字段的提取(1.5)、时间的比较(2.2,2.3)以及字符串的查询(3.1),其他都算是优化和补充点。


@

目录

1.SQL--JSON使用

1.1.JSON_ARRAY--转成数组

1.2.JSON_OBJECT--转成json对象

1.2.JSON_QUOTE--转成json

1.3.JSON_MERGE--合并json

1.4.JSON_VALID--判断是否为json

1.5.JSON_EXTRACT--提取json(重点*)

1.6.JSON完整内容

2.SQL--时间计算比较

2.1.时间--添加、减少

2.2时间格式转换

2.3统计本年/本月/本周/本日(重点*)

2.4 时间格式总结

3.SQL--字符串

3.1.Concat--模糊查询

3.2.locate--查找字符串

3.3.If、Case、Round--优化显示与字段计算

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 金额

书山有路勤为径,学海无涯苦作舟。程序员不仅要懂代码,更要懂生活,关注我,一起进步。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页