Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL DATE_SUB() 函数

MySQL DATE_SUB()函数的实现示例

作者:大马猴Will

本文主要介绍了MySQL DATE_SUB() 函数的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

函数简介

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() 函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文