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如何巧妙的绕过未知字段名详解

    Mysql如何巧妙的绕过未知字段名详解

    这篇文章主要给大家介绍了Mysql如何巧妙的绕过未知字段名的相关资料,文中给出了详细的示例代码供大家参考学习,对学习mysql具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • SQL中Limit的基本与高级用法详解

    SQL中Limit的基本与高级用法详解

    在SQL中LIMIT是一个用于限制结果集返回的行数的子句,这篇文章主要给大家介绍了关于SQL中Limit的基本与高级用法,文中通过代码介绍的非常详细,对大家学习或者使用sql具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-04-04
  • Linux系统部署MySQL(mariadb)并进行简单的操作步骤

    Linux系统部署MySQL(mariadb)并进行简单的操作步骤

    MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,这篇文章主要介绍了Linux系统部署MySQL(mariadb)并进行简单的操作步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-05-05
  • mysql优化的重要参数 key_buffer_size table_cache

    mysql优化的重要参数 key_buffer_size table_cache

    MySQL服务器端的参数有很多,但是对于大多数初学者来说,众多的参数往往使得我们不知所措,但是哪些参数是需要我们调整的,哪些对服务器的性能影响最大呢
    2016-05-05
  • mybatis统计每条SQL的执行时间的方法示例

    mybatis统计每条SQL的执行时间的方法示例

    这篇文章主要介绍了mybatis统计每条SQL的执行时间的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • MySQL数据库安装和Navicat for MySQL配合使用教程

    MySQL数据库安装和Navicat for MySQL配合使用教程

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。这篇文章主要介绍了MySQL数据库安装和Navicat for MySQL配合使用,需要的朋友可以参考下
    2019-06-06
  • 简单介绍MySQL中索引的使用方法

    简单介绍MySQL中索引的使用方法

    这篇文章主要介绍了简单介绍MySQL中索引的使用方法,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • mysql优化之路----hash索引优化

    mysql优化之路----hash索引优化

    本文是笔者自己做的关于mysql的优化方面的小测试,暂时仅仅做了hash索引优化的测试,以后会做更多方面,希望能够给您带来收获,祝您工作愉快。
    2014-08-08
  • Linux下MySQL8.0.26安装教程

    Linux下MySQL8.0.26安装教程

    文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友一起看看吧
    2024-12-12
  • 浅谈MySQL大表优化方案

    浅谈MySQL大表优化方案

    这篇文章主要介绍了浅谈MySQL大表优化方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论