MySQL常用函数详解之日期函数

 更新时间:2025年06月17日 10:10:01   作者:AA-代码批发V哥  
本文详解MySQL日期函数,涵盖获取、计算、格式化及比较,结合统计销售额、计算注册时长等实战案例,帮助掌握日期处理技巧,感兴趣的朋友一起看看吧

从记录订单时间、用户注册时间,到统计每月销售额、分析数据变化趋势,都离不开对日期时间的操作,MySQL提供了丰富的日期函数,能够高效地进行日期和时间的提取、计算、格式化等操作。本文我将深入剖析MySQL常用日期函数的功能、语法及应用场景,并结合实战案例,带你全面掌握日期函数的使用技巧。

一、日期函数概述

1.1 日期函数的作用

MySQL日期函数主要用于处理日期和时间数据,其核心作用包括:

  • 日期和时间的提取:从日期时间字段中获取年、月、日、时、分、秒等具体信息。
  • 日期和时间的计算:执行日期的加减运算,计算两个日期之间的间隔。
  • 日期和时间的格式化:将日期时间数据转换为指定的格式,方便展示和处理。
  • 日期和时间的比较与判断:判断日期是否在特定范围内,比较两个日期的先后顺序。

1.2 日期数据类型

在深入学习日期函数前,先回顾MySQL中常用的日期和时间数据类型:

  • DATE:用于存储日期,格式为YYYY-MM-DD
  • TIME:用于存储时间,格式为HH:MM:SS
  • DATETIME:用于存储日期和时间,格式为YYYY-MM-DD HH:MM:SS
  • TIMESTAMP:也用于存储日期和时间,范围比DATETIME更窄,但占用空间更小,自动更新为当前时间。

二、日期和时间的获取函数

2.1 获取当前日期和时间

  • CURDATE():返回当前日期,格式为YYYY-MM-DD
SELECT CURDATE();
  • CURTIME():返回当前时间,格式为HH:MM:SS
SELECT CURTIME();
  • NOW():返回当前日期和时间,格式为YYYY-MM-DD HH:MM:SS
SELECT NOW();
  • SYSDATE():同样返回当前日期和时间,与NOW()的区别在于SYSDATE()在函数执行时获取时间,而NOW()在语句开始执行时获取时间。
SELECT SYSDATE();

2.2 提取日期和时间的部分信息

  • YEAR(date):返回日期中的年份。
SELECT YEAR(NOW()) AS current_year;
  • MONTH(date):返回日期中的月份(1 - 12)。
SELECT MONTH(NOW()) AS current_month;
  • DAY(date):返回日期中的日(1 - 31)。
SELECT DAY(NOW()) AS current_day;
  • HOUR(time):返回时间中的小时数。
SELECT HOUR(CURTIME()) AS current_hour;
  • MINUTE(time):返回时间中的分钟数。
SELECT MINUTE(CURTIME()) AS current_minute;
  • SECOND(time):返回时间中的秒数。
SELECT SECOND(CURTIME()) AS current_second;

2.3 获取日期中的星期、季度等信息

  • WEEKDAY(date):返回日期对应的星期索引(0表示星期一,6表示星期日)。
SELECT WEEKDAY(NOW()) AS weekday_index;
  • DAYNAME(date):返回日期对应的星期名称。
SELECT DAYNAME(NOW()) AS weekday_name;
  • MONTHNAME(date):返回日期对应的月份名称。
SELECT MONTHNAME(NOW()) AS month_name;
  • QUARTER(date):返回日期所在的季度(1 - 4)。
SELECT QUARTER(NOW()) AS current_quarter;

三、日期和时间的计算函数

3.1 日期和时间的加减运算

  • DATE_ADD(date, INTERVAL expr unit):在指定日期上增加一段时间间隔。
-- 在当前日期上加7天
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY) AS add_7_days;
  • DATE_SUB(date, INTERVAL expr unit):在指定日期上减去一段时间间隔。
-- 在当前日期上减1个月
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH) AS subtract_1_month;
  • ADDDATE(date, INTERVAL expr unit):功能与DATE_ADD相同。
SELECT ADDDATE(NOW(), INTERVAL 3 HOUR) AS add_3_hours;
  • SUBDATE(date, INTERVAL expr unit):功能与DATE_SUB相同。
SELECT SUBDATE(NOW(), INTERVAL 15 MINUTE) AS subtract_15_minutes;

3.2 计算两个日期之间的间隔

  • DATEDIFF(date1, date2):返回两个日期之间相差的天数。
-- 计算两个日期之间的天数差
SELECT DATEDIFF('2024-12-31', '2024-01-01') AS day_difference;
  • TIMESTAMPDIFF(unit, datetime1, datetime2):返回两个日期时间之间的间隔,unit可以是YEARMONTHDAYHOURMINUTESECOND等。
-- 计算两个时间之间相差的小时数
SELECT TIMESTAMPDIFF(HOUR, '2024-01-01 00:00:00', '2024-01-01 12:00:00') AS hour_difference;

四、日期和时间的格式化函数

4.1 DATE_FORMAT(date, format)

DATE_FORMAT函数将日期按照指定的格式进行格式化,常用的格式代码如下:

  • %Y:四位年份(如2024)
  • %y:两位年份(如24)
  • %m:两位月份(01 - 12)
  • %b:月份缩写(如Jan)
  • %M:月份全称(如January)
  • %d:两位日期(01 - 31)
  • %H:24小时制小时数(00 - 23)
  • %h:12小时制小时数(01 - 12)
  • %i:分钟数(00 - 59)
  • %s:秒数(00 - 59)

示例:将当前日期格式化为“2024年12月31日 12:00:00”

SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i:%s') AS formatted_date;

4.2 TIME_FORMAT(time, format)

TIME_FORMAT函数用于格式化时间,与DATE_FORMAT类似,但仅适用于时间部分。

-- 将当前时间格式化为“下午12时00分00秒”
SELECT TIME_FORMAT(CURTIME(), '%p%h时%i分%s秒') AS formatted_time;

五、日期和时间的比较与判断函数

5.1 比较日期和时间的先后顺序

可以直接使用比较运算符(><>=<==)对日期和时间进行比较。

-- 判断当前日期是否大于指定日期
SELECT NOW() > '2024-01-01' AS is_greater;

5.2 判断日期是否在特定范围内

使用BETWEEN... AND...语句判断日期是否在指定的范围内。

-- 查询订单表中2024年1月1日到2024年12月31日之间的订单
SELECT *
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';

六、实战案例

6.1 统计每月销售额

sales表中,有order_date(订单日期)和amount(订单金额)字段,需求是统计每个月的总销售额。

SELECT 
    DATE_FORMAT(order_date, '%Y-%m') AS month,
    SUM(amount) AS total_sales
FROM 
    sales
GROUP BY 
    DATE_FORMAT(order_date, '%Y-%m')
ORDER BY 
    month;

6.2 计算用户注册时长

users表中,register_date字段记录了用户的注册日期,需求是计算每个用户的注册时长(以天数为单位)。

SELECT 
    user_id,
    DATEDIFF(CURDATE(), register_date) AS registration_days
FROM 
    users;

6.3 筛选本周内的活动数据

activities表中,activity_date字段记录活动发生的日期,需求是筛选出本周内的活动数据。

SELECT *
FROM activities
WHERE activity_date BETWEEN DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) 
                    AND DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) - 6 DAY);

到此这篇关于MySQL常用函数详解之日期函数的文章就介绍到这了,更多相关mysql日期函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MYSQL Left Join优化(10秒优化到20毫秒内)

    MYSQL Left Join优化(10秒优化到20毫秒内)

    在实际开发中,相信大多数人都会用到join进行连表查询,但是有些人发现,用join好像效率很低,而且驱动表不同,执行时间也不同。那么join到底是如何执行的呢,本文就详细的介绍一下
    2021-12-12
  • 一条 SQL 语句执行过程

    一条 SQL 语句执行过程

    这篇文章主要介绍了一条 SQL 语句执行过程的相关资料,没人详细具有一的的参考价值,需要的小伙伴可以参考一下,希望对你的学习和工作有所帮助
    2022-03-03
  • 修改MySQL所有表的编码或修改某个字段的编码步骤详解

    修改MySQL所有表的编码或修改某个字段的编码步骤详解

    这篇文章主要给大家介绍了关于修改MySQL所有表的编码或修改某个字段编码的相关资料,在进行数据库编码更改之前,需要先确定目标编码格式,常见的编码格式有UTF-8、GBK等,需要的朋友可以参考下
    2023-12-12
  • MySQL如何创建触发器

    MySQL如何创建触发器

    这篇文章主要为大家详细介绍了MySQL如何创建触发器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • mysql 乐观锁和悲观锁的具体使用

    mysql 乐观锁和悲观锁的具体使用

    本文主要介绍了mysql 乐观锁和悲观锁的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • MySQL隐式类型转换导致索引失效的解决

    MySQL隐式类型转换导致索引失效的解决

    本文主要介绍了MySQL隐式类型转换导致索引失效的解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • CentOS 7.0下使用yum安装mysql的方法详解

    CentOS 7.0下使用yum安装mysql的方法详解

    这篇文章主要介绍了CentOS 7.0下使用yum安装mysql的方法详解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Mysql的库函数整理大全(非常详细!)

    Mysql的库函数整理大全(非常详细!)

    MySQL数据库中提供了很丰富的函数,下面这篇文章主要给大家介绍了关于Mysql库函数的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-04-04
  • mysql表物理文件被误删的解决方法

    mysql表物理文件被误删的解决方法

    最近因为失误不小心误删了mysql表的物理文件,这个时候该怎么办呢?然后抓紧从网上找解决的方法,终于解决了,现在将解决的方法及过程分享给大家,有需要的朋友们可以参考借鉴,感兴趣的朋友们下面来一起学习学习吧。
    2016-11-11
  • 将数据插入到MySQL表中的详细教程

    将数据插入到MySQL表中的详细教程

    这篇文章主要介绍了将数据插入到MySQL表中的详细教程,文中给出了在PHP脚本中操作的示例,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05

最新评论