MySQL DATE_SUB()函数的实现示例

 更新时间:2025年03月05日 10:46:26   作者:大马猴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() 函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • MySQL DELETE速度提高的几种方法

    MySQL DELETE速度提高的几种方法

    提高MySQL中DELETE操作的速度通常涉及多个方面,包括优化查询、索引、表结构、硬件和配置等,本文主要介绍了MySQL DELETE速度提高的几种方法,感兴趣的可以了解一下
    2024-07-07
  • MySQL中存储时间的最佳实践指南

    MySQL中存储时间的最佳实践指南

    这篇文章主要给大家介绍了关于MySQL中存储时间的最佳实践,文中详细介绍了哪种存储时间的方式更好,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友可以参考下
    2021-07-07
  • MySQL 实现树的遍历详解及简单实现示例

    MySQL 实现树的遍历详解及简单实现示例

    这篇文章主要介绍了MySQL 实现树的遍历详解及简单实现示例的相关资料,这里提供了示例代码及测试结果,需要的朋友可以参考下
    2017-01-01
  • sql中替换函数replace()用法与实例总结

    sql中替换函数replace()用法与实例总结

    这篇文章主要给大家介绍了关于sql中替换函数replace()用法与实例的相关资料,在SQL中REPLACE函数用于替换一个字符串中的一部分为另一个字符串,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • mySQL中in查询与exists查询的区别小结

    mySQL中in查询与exists查询的区别小结

    最近被一个朋友问到mySQL中in查询和exists的区别,当然只是草草的回答了下,今天偶然看到了一篇关于mysql中的exists查询的文章,读完感觉太”冷落”它了,这里总结一下,也跟自己常用的in查询做一下对比。有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • Mysql 9.0.0创新MSI安装的实现

    Mysql 9.0.0创新MSI安装的实现

    本文提供了MySQL 9.0.0版本的MSI安装方法,包括安装前的下载链接,安装过程中的选项介绍,以及安装完成后的配置指南,具有一定的参考价值,感兴趣的可以了解一下
    2024-10-10
  • Windows下通过DOS命令登录MYSQL的方法

    Windows下通过DOS命令登录MYSQL的方法

    这篇文章主要介绍了Windows下通过DOS命令登录MYSQL的方法,方法很简单,本文给出了详细操作步骤,需要的朋友可以参考下
    2015-05-05
  • MySQL数据库输入密码后闪退问题的解决方法

    MySQL数据库输入密码后闪退问题的解决方法

    这篇文章主要为大家详细介绍了MySQL数据库输入密码后闪退的问题及解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • MySQL不适合创建索引的11种情况示例分析

    MySQL不适合创建索引的11种情况示例分析

    这篇文章介绍了在MySQL中不适合创建索引的11种情况,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-02-02
  • MySQL乐观锁和悲观锁具体实现

    MySQL乐观锁和悲观锁具体实现

    这篇文章主要介绍了MySQL乐观锁和悲观锁具体实现,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论