it编程 > 数据库 > Mysql

MySQL DATE_SUB()函数的实现示例

8人参与 2025-03-05 Mysql

函数简介

date_sub()函数从日期(datedatetime)中减去时间值(或间隔)。

语法

例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
app 中接收数据代码:

date_sub(date,interval expr type)

参数说明:

date 日期(时间)
expr 日期(时间)间隔
type 日期(时间)间隔单位

type 参数可以是下列值:

在这里插入图片描述

注意:type分为复合型和不复合型,不复合型的type可以和date_add()函数通用,expr可以为负数;复合型的type,参数用引号包起来,中间用字符间隔起来,不能使用负数。如果日期(时间)间隔只指定了一个值,也能正常执行,但对应xxx_yyy的type使用的是下划线后yyy的单位,此时可以使用负数。

举例

复合型

select date_add('2024-12-30', interval '1 2' year_month); #结果:2026-02-28                                      
select date_add('2024-12-30', interval '1-2' year_month); #结果:2026-02-28                                   
select date_add('2024-12-30', interval '1,2' year_month); #结果:2026-02-28                                  
select date_add('2024-12-30', interval 1 year_month);  #结果:2025-01-30                              
select date_add('2024-12-30', interval -1 year_month); #结果:2024-11-30  

# 这里先减1年,再减2月,最后减1天,有点意思
select date_sub('2024-12-30', interval '1 2' year_month); #结果:2023-10-30                                      
select date_sub('2024-12-30', interval '1-2' year_month); #结果:2023-10-30                                    
select date_sub('2024-12-30', interval '1,2' year_month); #结果:2023-10-30     
                             
select date_sub('2024-12-30', interval 1 year_month);  #结果:2024-11-30                              
select date_sub('2024-12-30', interval -1 year_month); #结果:2025-01-30  

非复合型

select date_add(now(), interval 1 day); # 加1天 2024-12-31 15:44:20
select date_add(now(),interval -1 day); # 当前日期向前推1天 2024-12-29 15:44:20
select date_add(now(), interval 1 hour);# 加1小时 2024-12-30 16:44:20
select date_add(now(), interval 1 minute); # 加1分钟 2024-12-30 15:45:20
select date_add(now(), interval 1 second); # 加1秒 2024-12-30 15:44:21
select date_add(now(), interval 1 microsecond); # 加1毫秒 2024-12-30 15:44:20.000001
select date_add(now(), interval 1 week); # 加1周 2025-01-06 15:44:20
select date_add(now(), interval 1 month);# 加1月 2025-01-30 15:44:20
select date_add(now(), interval 1 quarter); # 加1季 2025-03-30 15:44:20
select date_add(now(), interval 1 year);# 加1年 2025-12-30 15:44:20

select date_sub(now(), interval 1 day); # 减1天 2024-12-29 15:45:42
select date_sub(now(),interval -1 day); # 当前日期向后推1天 2024-12-31 15:45:42
select date_sub(now(), interval 1 hour);# 减1小时 2024-12-30 14:45:42
select date_sub(now(), interval 1 minute); # 减1分钟 2024-12-30 15:44:42
select date_sub(now(), interval 1 second); # 减1秒 2024-12-30 15:45:41
select date_sub(now(), interval 1 microsecond); # 减1毫秒 2024-12-30 15:45:41.999999
select date_sub(now(), interval 1 week); # 减1周 2024-12-23 15:45:42
select date_sub(now(), interval 1 month);# 减1月 2024-11-30 15:45:42
select date_sub(now(), interval 1 quarter); # 加1季 2024-09-30 15:45:42
select date_sub(now(), interval 1 year);# 减1年 2023-12-30 15:45:42

无效或格式错误的日期

select date_sub('2024-12-30', interval - 1 day); # null
select date_sub('20-2412-30', interval - 1 day); # null

应用场景

电商系统,一个订单客户收货后,7天自动截单,一般会查询超过七天未完成的订单

select
	* 
from
	sys_order 
where
	state = 7 # 已收货状态是7
	and delivery_time <= date_sub( now( ), interval 7 day )
	# 这里将当前时间减去7天后,再去和收货时间进行比较,小于或等于这个结果的都是收货超过7天的订单。

采购系统中,会创建采购评估单(类似电商系统购物车),后续可能将评估单转为正式订单,每个月都有评估单截止日期,并且会对截单日期进行管理,我们会根据评估单的创建日期来判断截单日期是哪一天,此时我们如果想取评估单的截止日期(取得方式:如果评估单的创建时间在当月截止日期之前或者截止日期当天,则当前评估单的的截止日期就是系统设定的下个月的截止日期,如果评估单的创建时间在本月截止日期之后,则当前评估单的的截止日期就是系统设定的下下个月的截止日期)

例如

系统设定每月的截止日期:
2024年10月15日,2024年11月15日,2024年12月15日
①评估单的创建日期:2024年10月10日,评估单的截止日期:2024年11月15日
②评估单的创建日期:2024年10月15日,评估单的截止日期:2024年11月15日
③评估单的创建日期:2024年10月16日,评估单的截止日期:2024年12月15日

select
	date 
from
	sys_deadline_setting 
where
	date >= date_sub( order_create_time, interval - 1 month ) 
	limit 1

也可以这样写

select
	date 
from
	sys_date_setting 
where
	date >= date_add( order_create_time, interval 1 month ) 
	limit 1

到此这篇关于mysql date_sub()函数的实现示例的文章就介绍到这了,更多相关mysql date_sub() 函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

MySQL5.7.35双主搭建的实现

03-05

MySQL高可用与扩展方式

03-05

MySQL逻辑备份的实现步骤

03-05

Nginx中location实现多条件匹配的方法详解

03-05

MySQL修改密码的四种方式详解

03-06

MySQL中如何开启二进制日志(Binlog)

03-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论