MySQL 日期函数大全

06-01 1541阅读

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
    

    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)
    

    简写语法

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

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

    实际应用场景

    场景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;
    

    注意事项

    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条件中对列使用这些函数会导致索引失效

    与其他日期函数的对比

    需求推荐函数示例
    计算未来/过去特定时间点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()

    DATEDIFF

    MySQL 日期函数大全

    DATEDIFF 函数解释

    DATEDIF(datepart, startdate, enddate) 是一个日期函数,用于计算两个日期之间的时间差。

    参数说明

    1. datepart - 指定要计算的时间单位,常用值包括:

      • year 或 yy - 年

      • quarter 或 qq - 季度

      • month 或 mm - 月

      • day 或 dd - 日

      • week 或 wk - 周

      • hour 或 hh - 小时

      • minute 或 mi - 分钟

      • second 或 ss - 秒

    2. startdate - 开始日期

    3. enddate - 结束日期

    返回值

    函数返回从 startdate 到 enddate 之间指定 datepart 单位的整数差值。

    示例

    -- 计算两个日期之间的天数差
    SELECT DATEDIFF(day, '2023-01-01', '2023-01-31') 
    -- 返回 30
    -- 计算两个日期之间的月份差
    SELECT DATEDIFF(month, '2023-01-15', '2023-03-20') 
    -- 返回 2 (即使不足整月也按整月计算)
    

    注意事项

    • 在SQL Server中函数名为 DATEDIFF,在其他数据库系统中可能有不同名称或语法

    • 结果总是整数,会截断小数部分

    • enddate 应晚于 startdate,否则返回负值

    DATE_FORMAT

    在 MySQL 中,DATE_FORMAT() 函数用于将日期或时间值格式化为指定的字符串格式。

    正确语法

    DATE_FORMAT(date, format)
    

    常用格式说明符

    说明符描述
    %Y四位数的年份(例如:2023)
    %y两位数的年份(例如:23)
    %m两位数的月份(01-12)
    %d两位数的日期(01-31)
    %H24小时制的小时(00-23)
    %i分钟(00-59)
    %s秒(00-59)

    示例用法

    1. 获取四位数的年份:
    SELECT DATE_FORMAT(created_at, '%Y') FROM your_table;
    
    1. 获取完整的日期时间格式:
    SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') FROM your_table;
    
    1. 获取月份和年份:
    SELECT DATE_FORMAT(created_at, '%M %Y') FROM your_table;
    -- 结果示例:"May 2023"
    
    1. 在你的例子中,如果要提取年份:
    SELECT DATE_FORMAT(created_at, '%Y') AS year FROM your_table;
    

    注意事项

    • MySQL 的 DATE_FORMAT() 函数使用百分号 (%) 作为格式说明符的前缀
    • 函数名是 DATE_FORMAT 而不是 dateformt(注意大小写不敏感但拼写要正确)
    • 第一个参数是日期/时间列或表达式,第二个参数是格式字符串
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码