欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > SQL:MySQL函数:日期函数(Date Functions)

SQL:MySQL函数:日期函数(Date Functions)

2025/5/15 18:21:20 来源:https://blog.csdn.net/2402_88047672/article/details/147887988  浏览:    关键词:SQL:MySQL函数:日期函数(Date Functions)

目录

时间是数据的一种类型

🧰 MySQL 常用时间函数大全

🟦 1. 获取当前时间/日期

🟦 2. 日期运算(加减)

🟦 3. 时间差计算

🟦 4. 格式化日期

🟦 5. 提取时间部分

🟦 6. 时间戳相关 

 函数之间的联系


时间是数据的一种类型

我们用 MySQL 存储时间,其实和存储数字、字符串一样,时间是 一类特殊的数据类型DATE / DATETIME / TIMESTAMP)。

所以我们要处理它,比如:

  • 现在是什么时间?(取值)

  • 某个时间加上 3 天是多少?(运算)

  • 两个时间差多少?(对比)

  • 显示成“年-月-日”?(格式化)

于是我们需要一类“时间函数工具箱”来完成这些任务。


🧰 MySQL 常用时间函数大全

🟦 1. 获取当前时间/日期

函数名中文含义示例返回
NOW()当前日期和时间SELECT NOW();2025-05-08 20:21:00
CURDATE()当前日期(不包括时间)SELECT CURDATE();2025-05-08
CURTIME()当前时间(不包括日期)SELECT CURTIME();20:21:00

适用场景:记录操作时间、筛选“今天”的数据、判断是否超期。

🟦 2. 日期运算(加减)

函数名中文含义示例返回
DATE_ADD(d, INTERVAL n unit)某日期加上时间间隔DATE_ADD('2024-01-01', INTERVAL 3 DAY)2024-01-04
DATE_SUB(d, INTERVAL n unit)某日期减去时间间隔DATE_SUB('2024-01-10', INTERVAL 1 MONTH)2023-12-10
  • unit 可以是 DAY, MONTH, YEAR, HOUR, MINUTE 等。

适用场景:查“过去 7 天”/“近 1 个月”的记录。

DATE_ADD(date, INTERVAL expr unit)

  • 功能:给日期加上指定的时间间隔。

  • 语法:

SELECT DATE_ADD('2025-05-13', INTERVAL 10 DAY);  -- 加10天

DATE_SUB(date, INTERVAL expr unit)

  • 功能:从日期中减去时间间隔。

  • 语法:

SELECT DATE_SUB('2025-05-13', INTERVAL 1 MONTH);  -- 减1个月

🟦 3. 时间差计算

函数名中文含义示例返回
DATEDIFF(d1, d2)d1 - d2 相差多少(整数)DATEDIFF('2025-05-10', '2025-05-01')9
TIMESTAMPDIFF(unit, d1, d2)相差多少单位(更灵活)TIMESTAMPDIFF(MONTH, '2023-01-01', '2025-05-01')28
  • unit 也可以是 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR

适用场景:计算会员时长、距离到期还有几天、是否超时。

DATEDIFF(date1, date2)

  • 功能:计算两个日期之间的天数差值(date1 - date2)。

  • 语法:

SELECT DATEDIFF('2025-05-13', '2025-05-01');  -- 返回 12

TIMESTAMPDIFF(unit, datetime1, datetime2)

  • 功能:计算两个时间之间的差值,可指定单位(SECOND, MINUTE, HOUR, DAY, MONTH, YEAR)。

  • 语法:

SELECT TIMESTAMPDIFF(DAY, '2025-05-01', '2025-05-13'); -- 返回 12

🟦 4. 格式化日期

函数名中文含义示例返回
DATE_FORMAT(d, format)格式化时间DATE_FORMAT(NOW(), '%Y-%m-%d')2025-05-08

适用场景:前端展示、日志格式化、分组查询(比如按月统计)。

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

 常用格式符号

符号含义
%Y四位数年份(2025)
%y两位数年份(25)
%m月份(01–12)
%d日期(01–31)
%H小时(00–23)
%i分钟(00–59)
%s秒(00–59)

🟦 5. 提取时间部分

函数名中文含义示例返回
YEAR(d)提取年份YEAR(NOW())2025
MONTH(d)提取月份MONTH('2024-08-15')8
DAY(d)提取日期DAY('2025-05-08')8
HOUR(d)小时HOUR('20:15:00')20

适用场景:按年月日分组、按小时分布分析。 

YEAR(date)

  • 功能:提取年份。

  • 语法:

SELECT YEAR('2025-05-13');  -- 返回 2025

DAY(date)DAYOFMONTH(date)

  • 功能:提取日期中的“日”部分。

  • 语法:

SELECT DAY('2025-05-13');  -- 返回 13

HOUR(time) / MINUTE(time) / SECOND(time)

  • 功能:提取时间的时、分、秒。

  • 示例:

SELECT HOUR('14:32:10');     -- 返回 14
SELECT MINUTE('14:32:10');   -- 返回 32
SELECT SECOND('14:32:10');   -- 返回 10

🟦 6. 时间戳相关 

时间戳(Timestamp)是指从一个特定的起点时间开始所经过的总秒数,通常用于表示某个时刻。它是计算机中一种常见的时间表示方式,可以精确、方便地进行时间计算和排序。 

  • Unix时间戳(Unix Timestamp):是自1970年1月1日 00:00:00 UTC以来所经过的总秒数。

  • 它是一个整数(精确到秒),例如:

1715601130

表示的是 2025年5月13日 13:32:10(UTC) 左右。 

时间戳的特点

特性描述
精度高精确到秒(也可毫秒、微秒)
易于比较时间戳是整数,直接比较大小即可判断前后
跨平台通用适用于大多数编程语言和数据库
不含时区信息默认以UTC计算,需要转换为本地时间

UNIX_TIMESTAMP()

  • 功能:获取当前时间的 Unix 时间戳(单位:秒)

  • 示例:

SELECT UNIX_TIMESTAMP();
-- 返回:1715601130

FROM_UNIXTIME(timestamp)

  • 功能:将 Unix 时间戳转为可读的日期时间

  • 示例:

SELECT FROM_UNIXTIME(1715601130);
-- 返回:2025-05-13 13:32:10

UNIX_TIMESTAMP(date)

  • 功能:将一个标准时间转为 Unix 时间戳

  • 示例:

SELECT UNIX_TIMESTAMP('2025-05-13 13:32:10');
-- 返回:1715601130

 

 函数之间的联系

可以把它们看成一个工具链:

     [当前时间]         [日期格式化]NOW()   CURDATE() ───> DATE_FORMAT()↓                    ↑DATE_ADD()           TIMESTAMPDIFF()DATE_SUB()           DATEDIFF()↓                    ↑生成目标时间       计算时间差↓                    ↑YEAR(), MONTH(), DAY() ←────提取某部分

示例:

-- 查询本月注册的用户
SELECT * FROM users 
WHERE DATE_FORMAT(created_at, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m');-- 计算某订单创建以来已过天数
SELECT DATEDIFF(NOW(), order_created_at) AS days_elapsed
FROM orders;-- 添加30天后的到期时间
SELECT DATE_ADD(created_at, INTERVAL 30 DAY) AS expiry_date
FROM users;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词