一文速学-玩转MySQL时间运算函数以及时间匹配操作详解+实例代码

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 一文速学-玩转MySQL时间运算函数以及时间匹配操作详解+实例代码

前言


首先展示的数据库以及表格依然是原来的value_test表格:f2ebed6ffd5e426ba8799ca7943f2896.png 用到的字段一般是time以及create_time,其中time是以bigint的形式存储,而create_time是以datetime时间类型数据存储。


一、时间加减


1.时间变量运算


前文也有详细描述关于interval这个关键字的用法,一般就是用于时间的运算操作:


例如减去一天时间为:


select (create_time - interval 1 day ) as times from value_test


这里不再重复演示,想要了解更多的可以去看第三篇文章。


2.date_add()


date_add顾名思义就是增加一个时间间隔的意思,基本语法:


date_add(<时间数据>,interval <数值> <时间单位> )


后面的时间单位和interval的时间单位类型是一样的,第三篇也已经提到过后缀时间单位,这里不做演示,下面将结合前三张的文章做一些较为复杂的时间取值:

选择至今开始到近七日总的时间片内的数据:


between cast(date_sub(date_format(curdate(),'%Y%m%d') , interval 7 day)
 as DECIMAL)
 and cast(date_sub(date_format(curdate(),'%Y%m%d') , interval 1 day)
as DECIMAL)


选择昨日的数据:

and time= cast(date_sub(date_format(curdate(),'%Y%m%d') , interval 1 day)
 as DECIMAL)

看了前三篇文章应该很好理解套用这些函数的功能了,可以任意的进行时间加减运算了。


3. date_sub()


减去一个时间间隔,这里可以使用interval的众多时间单位来实现一些精密的时间运算。

select date_sub(create_time ,interval '1 10:10:10' day_second )
 as times from value_test

意为减去1天1小时10分钟10秒:

5828c922056c4dcf9a69cd7e46e1e689.png


也可以使用date_add()代替,只要interval数值为负数就好了。 如:


1. select date_add(create_time ,interval '-1 10:10:10' day_second )
2. as times from value_test

3b30f9ba47ec46e4bdbf4a65c5d7cf62.png


4.period_add()


period_add()函数的基本语法格式为:


period_add(P,N)


从add就可以看出来也是一个相加函数,P为指定的日期数,而N则为加减的时间。和date_add不同的是,period_add不需要使用interval指定日期数值,该函数根据输入的P的长度自动判断相加减的单位。当输入的为yyyymm时,N被判别为月份相加:


select PERIOD_ADD(202201,10) as times 

e986c1e298a44f02b8d253057c5d135f.png


当输入为yyyymmdd时,N被判定为天数:

 

select PERIOD_ADD(20220101,10) as times

56f00f5157064c5185ed7c3a1cb33303.png

用该函数的时候要注意一下,period_add并不适用于列运算,如果用于一列作运算则会报错:


select PERIOD_ADD(time,10) as times from value_test


> Incorrect arguments to period_add


5.period_diff(P1,P2)


该函数功能为返回P1-P2的时间差,P1和P2必须为yyyymm年月的形式,说实话这函数几乎没人用,挺鸡肋的。


select PERIOD_diff(202201,202202)as times

c1e279fb49b34eac87b8bc57f5d1bd31.png


6.datediff(date1,date2)


返回两个日期之间的间隔:


select datediff('20220601','20220501') as time


08142873aefe48619871e15f0d6b9114.png


但是date1和date2只能为日期yyyymmdd,不是这个格式将会输出null。


该函数不止可以和时间类型数据识别运算,还可以与其他存储时间数据的类型作用:

select datediff(time,'20220501') as time from value_test

0c7c159082574728bf4bc9c409f3cf37.png


而且只要到达了yyyymmdd这种格式就可以运算:


select datediff(create_time,'20220501') as time from value_test


61a40636d1bc412b90056668c3552cab.png

7.timediff(time1,time2)


格式和上述datediff一样,没用什么特点:


select timediff(time(create_time),'01:00:00') as time from value_test


f233176ca2cd4e44b53b8f443e41a294.png


8.time_to_sec()、sec_to_time()


time_to_sec()该函数可以将时间全都转换为秒数:


select time_to_sec(time(create_time)) as time from value_test


ed624871ec534a0fb302dac0d3f4e82a.png


sec_to_time()该函数可以将秒数转化为时间,和time_to_sec()反着来了,可以再叠加一次回到原函数:


select sec_to_time(time_to_sec(time(create_time))) as time from value_test

950e8d7613ef44299d2cc9418a4964ab.png


9.to_days(date),from_days(days)


to_days()输入date日期转换为天数:


select to_days(time) as time from value_test

4176bc57203144cf832dbed7f393d70c.png

date输入的参数也没有规定必须要时间类型数据,其他存储可识别的时间类型格式都可以。


其终止时间为:0000/00/00


from_days()则相反,将天数转换为date,这里我们也用两个嵌套得到原数据:

select from_days(to_days(time)) as time from value_test

198726cd58574e03a2b470dbf71efade.png


10.time_formate


这里弥补一下上篇时间转换函数遗漏的time_format函数,用法很简单也只限制为时间time,与date_format不同的是:time_format可以将时间转换为00.00.00的形式:

select time_format(time(create_time),'%H.%i.%s') as time from value_test

68181a4e34054fe6aac6546b807bf785.png


二、时间格式匹配


1.get_format()


get_format()函数语法格式为:


get_format(<时间数据>,'<指定字符 'eur'|'usa'|'jis'|'iso'|'internal'>')
select GET_FORMAT(date,'usa' ) as time 

22126b0b442c4b94bcd43f9359626f4d.png

这里直接以图表形式贴出:


时间类型 地区时间格式 返回结果

date 'usa' '%m.%d.%Y'

date 'jis' '%Y-%m-%d'

date 'iso' '%Y-%m-%d'

date 'eur' '%d.%m.%Y'

date 'internal' %Y%m%d'

datetime 'usa' '%Y-%m-%d %H.%i.%s'

datetime 'jis' '%Y-%m-%d %H:%i:%s'

datetime 'iso' '%Y-%m-%d %H:%i:%s'

datetime 'eur' '%Y-%m-%d %H.%i.%s'

datetime 'internal' '%Y%m%d%H%i%s'

time 'usa' '%h:%i:%s %p'

time 'jis' '%H:%i:%s'

time 'iso' '%H:%i:%s'

time 'eur' '%H.%i.%s'

time 'internal' %H%i%s'


2.substr()


基本语法格式:


substr(string string,num start,num length);


  • string:为字符串
  • start:为起始位置;
  • length:为长度。


如果我们要选取当月的日期:

and substr(time,1,6) = substr(  cast(date_sub(date_format(curdate(),'%Y%m%d')
 , interval 1 day) as DECIMAL),1,6)

起始不能从0开始,只能从1开始。

select time from value_test
WHERE substr(time,1,6)>'202205'
and substr(time,1,6)<'202207'

这样就可以选取6月份的所有数据了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
7月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
8月前
|
消息中间件 缓存 弹性计算
纯PHP+MySQL手搓高性能论坛系统!代码精简,拒绝臃肿
本内容分享了一套经实战验证的社交系统架构设计,支撑从1到100万用户的发展,并历经6次流量洪峰考验。架构涵盖客户端层(App、小程序、公众号)、接入层(API网关、负载均衡、CDN)、业务服务层(用户、内容、关系、消息等服务)、数据层(MySQL、Redis、MongoDB等)及运维监控层(日志、监控、告警)。核心设计包括数据库分库分表、多级缓存体系、消息队列削峰填谷、CQRS模式与热点数据动态缓存。同时提供应对流量洪峰的弹性伸缩方案及降级熔断机制,并通过Prometheus实现全链路监控。开源建议结构清晰,适合大型社交平台构建与优化。
343 11
|
3月前
|
存储 弹性计算 关系型数据库
如何通过控制台创建RDS MySQL实例
本文介绍了通过控制台创建RDS MySQL实例的详细步骤,包括准备工作、选择计费方式、地域、实例规格、存储空间等关键配置,并指导用户完成下单与实例查看。
|
4月前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL数据库的多实例环境
MySQL多实例是指在一台服务器上运行多个MySQL服务,通过不同端口提供独立的数据服务。各实例共享安装程序,但使用各自的配置文件和数据文件,实现资源高效利用。本文详细介绍了如何通过“mysqld_multi”工具配置和启动多个MySQL实例,并演示了目录创建、初始化、配置文件修改及实例启动等操作步骤。
219 1
|
6月前
|
SQL 关系型数据库 MySQL
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
541 2
|
8月前
|
SQL Oracle 关系型数据库
在MySQL Shell里 重启MySQL 8.4实例
在MySQL Shell里 重启MySQL 8.4实例
273 2
|
9月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
【YashanDB知识库】MySQL field 函数的改写方法
|
9月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
本文来自YashanDB官网,介绍将MySQL的FIELD函数改写到YashanDB的方法。MySQL中,FIELD函数用于自定义排序;而在YashanDB中,可使用DECODE或CASE语句实现类似功能。示例展示对表`t1`按指定顺序排序的过程,提供两种改写方式,结果均符合预期。
|
11月前
|
SQL 关系型数据库 MySQL
Mysql-常用函数及其用法总结
以上列举了MySQL中一些常用的函数及其用法。这些函数在日常的数据库操作中非常实用,能够简化数据查询和处理过程,提高开发效率。掌握这些函数的使用方法,可以更高效地处理和分析数据。
307 19

推荐镜像

更多