当前位置: 首页 > news >正文

MySQL 日期加减函数详解

MySQL 日期加减函数详解

1. DATE_ADD 函数

基本语法

DATE_ADD(date, INTERVAL expr unit)

功能

在指定日期/时间上添加一个时间间隔

参数说明

  • date:要处理的日期/时间值(可以是DATE, DATETIME或TIMESTAMP类型)
  • expr:要添加的间隔数值(可以是正数或负数)
  • unit:时间单位(见下方支持的单位)

支持的时间单位

MICROSECOND | SECOND | MINUTE | HOUR | DAY 
| WEEK | MONTH | QUARTER | YEAR 
| SECOND_MICROSECOND | MINUTE_MICROSECOND 
| MINUTE_SECOND | HOUR_MICROSECOND 
| HOUR_SECOND | HOUR_MINUTE 
| DAY_MICROSECOND | DAY_SECOND 
| DAY_MINUTE | DAY_HOUR 
| YEAR_MONTH

使用示例

-- 加1天
SELECT DATE_ADD('2023-01-01', INTERVAL 1 DAY);  -- 结果: 2023-01-02-- 加1个月
SELECT DATE_ADD('2023-01-31', INTERVAL 1 MONTH); -- 结果: 2023-02-28 (自动处理月末)-- 加1年
SELECT DATE_ADD('2020-02-29', INTERVAL 1 YEAR);  -- 结果: 2021-02-28 (闰年自动调整)-- 加3小时30分钟
SELECT DATE_ADD('2023-01-01 12:00:00', INTERVAL '3:30' HOUR_MINUTE); -- 结果: 2023-01-01 15:30:00-- 使用负数表示减法
SELECT DATE_ADD('2023-01-01', INTERVAL -1 DAY);  -- 结果: 2022-12-31

2. DATE_SUB 函数

基本语法

DATE_SUB(date, INTERVAL expr unit)

功能

与DATE_ADD相反,从指定日期/时间减去一个时间间隔

使用示例

-- 减1天
SELECT DATE_SUB('2023-01-01', INTERVAL 1 DAY);  -- 结果: 2022-12-31-- 减1个月
SELECT DATE_SUB('2023-03-31', INTERVAL 1 MONTH); -- 结果: 2023-02-28-- 等同于DATE_ADD使用负数
SELECT DATE_SUB('2023-01-01', INTERVAL 1 DAY) = DATE_ADD('2023-01-01', INTERVAL -1 DAY); -- 结果: 1(TRUE)

3. 简写语法

MySQL还提供更简洁的日期加减写法:

-- 加1天
SELECT '2023-01-01' + INTERVAL 1 DAY;-- 减1个月
SELECT '2023-01-01' - INTERVAL 1 MONTH;

4. 实际应用场景

场景1:计算到期日

-- 贷款30天后到期
SELECT loan_date, DATE_ADD(loan_date, INTERVAL 30 DAY) AS due_date 
FROM loans;

场景2:查找最近7天的记录

SELECT * FROM orders 
WHERE order_date >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY);

场景3:处理订阅续期

-- 订阅续期1年
UPDATE subscriptions 
SET end_date = DATE_ADD(end_date, INTERVAL 1 YEAR)
WHERE user_id = 1001;

5. 注意事项

  1. 自动调整无效日期

    SELECT DATE_ADD('2023-01-31', INTERVAL 1 MONTH); -- 返回2023-02-28
    
  2. 闰年处理

    SELECT DATE_ADD('2020-02-29', INTERVAL 1 YEAR); -- 返回2021-02-28
    
  3. 时间溢出处理

    SELECT DATE_ADD('2023-01-01 23:59:59', INTERVAL 1 SECOND); -- 返回2023-01-02 00:00:00
    
  4. 性能考虑:在WHERE条件中对列使用这些函数会导致索引失效

6. 与其他日期函数的对比

需求推荐函数示例
计算未来/过去特定时间点DATE_ADD/DATE_SUBDATE_ADD(now(), INTERVAL 1 HOUR)
计算两个日期的差值DATEDIFF/TIMESTAMPDIFFDATEDIFF(end_date, start_date)
提取日期部分DATE_FORMAT/EXTRACTEXTRACT(YEAR FROM date)
获取当前日期/时间NOW/CURDATESELECT CURDATE(), NOW()
http://www.dtcms.com/a/169584.html

相关文章:

  • 进程间通信(IPC)
  • sql 注入中的万能密码
  • iOS启动优化:从原理到实践
  • ActiveMQ 集群搭建与高可用方案设计(二)
  • 大数据:数字时代的驱动力
  • 数据库原理与应用实验二 题目七
  • Oracle 11g通过dg4odbc配置dblink连接神通数据库
  • 前端面试每日三题 - Day 23
  • 多数据源动态切换
  • HTML简介
  • ​​信息泄露:网站敏感文件泄漏的隐形危机与防御之道​
  • 高性能架构设计-高可用
  • 专为焦油介质打造:煤焦油专用气动硬密封调节 V 型球阀(带手动)的卓越特点-耀圣
  • C#VisionMaster算子二次开发(非方案版)
  • 在Java项目中实现本地语音识别与热点检测,并集成阿里云智能语音服务
  • 考研408《计算机组成原理》复习笔记,第二章计算机性能
  • 第2章 创建独立的 Anaconda 环境
  • 基于机器学习的心脏病数据分析与可视化(百度智能云千帆AI+DeepSeek人工智能+机器学习)健康预测、风险评估与数据可视化 健康管理平台 数据分析与处理
  • 网格不迷路:用 CSS 网格生成器打造完美布局
  • 0902Redux_状态管理-react-仿低代码平台项目
  • FramePack部署(从PyCharm解释器创建和使用开始)保姆级教程
  • C++ 抽象工厂模式详解
  • NuttX 与 PX4 系统开发全流程详解
  • 多协议 Tracker 系统架构与传感融合实战 第四章 IMU 与 UWB 传感融合框架
  • Qt SQL 核心类说明文档
  • Chromium 134 编译指南 - Android 篇(八):开始编译
  • 【RabbitMQ】 RabbitMQ快速上手
  • java面向对象编程【高级篇】之特殊类
  • 大数据技术:从趋势到变革的全景探索
  • #Paper Reading# DeepSeek Math