MySQL数据库日期时间函数大全

2026-02-13 19:24:29

一、获取当前日期/时间类

函数

说明

NOW()

当前日期 + 时间

CURDATE()

当前日期

CURTIME()

当前时间

CURRENT_TIMESTAMP()

当前时间戳(与 NOW 等价),常用于字段默认值

LOCALTIME()

本地时间,与 NOW 相同

LOCALTIMESTAMP()

同上,与 NOW 相同

二、日期计算函数(加减时间)函数

说明

DATE_ADD()

给日期增加时间

DATE_SUB()

给日期减少时间

ADDDATE()

增加日期,同 DATE_ADD

SUBDATE()

减少日期,同 DATE_SUB

示例:

获取本月第一天代码语言:javascript复制select date_add(curdate(), interval - day(curdate()) + 1 day);

三、日期提取类(取年、月、日等)函数

说明

YEAR(date)

MONTH(date)

DAY(date)

HOUR(time)

小时

MINUTE(time)

SECOND(time)

WEEK(date, mode)

星期(周)

DAYOFWEEK(date)

星期几,返回 1-7,其中 1=周日,7=周六

DAYOFYEAR(date)

一年中的第几天

DAYOFMONTH(date)

月中的第几天

WEEKOFYEAR(date)

一年中的第几个星期

WEEKDAY(date)

一年中的第几个星期

示例今天是本年的第几周代码语言:javascript复制select WEEKOFYEAR(now());

select WEEK(CURDATE(),1)

四、日期格式化函数

说明

DATE_FORMAT()

日期格式化

TIME_FORMAT()

时间格式化

STR_TO_DATE()

字符串转日期格式

示例:

日期转换成字符串代码语言:javascript复制SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

本月第一天代码语言:javascript复制select DATE_FORMAT(now(), '%Y-%m-01');

字符串转换成日期代码语言:javascript复制SELECT STR_TO_DATE('2025-12-08', '%Y-%m-%d');

常用格式说明:格式符

含义

%Y

4位年份(如:2025)

%y

2位年份(25)

%m

月份(01-12)

%c

月份(1-12))

%d

日(08)

%e

日(8)

%H

小时(24小时制),带前导0

%h

小时(12小时制),带前导0

%k

小时(24小时制),不带前导0

%I

小时(12小时制),同 %h

%l

小时(12小时制),不带前导0

%i

%s

%W

星期名称

%w

星期数字

%a

星期缩写

%M

月份名称

%b

月份名称缩写

%p

显示上午或下午

%T

完整24小时制时间

%r

完整12小时制时间

五、日期差值计算函数

说明

DATEDIFF(a, b)

两个日期之间的天数差

TIMEDIFF(a, b)

两个时间之间的差值

TIMESTAMPDIFF(unit, a, b)

两个日期或时间之间的差值

PERIOD_DIFF(a, b)

两个期间之间的月份差,期间格式为 YYMM 或 YYYYMM

示例:

获取当前时间与上个月之间的天数代码语言:javascript复制select datediff(curdate(), date_sub(curdate(), interval 1 month));

获取当前时间到指定日期的时间间隔代码语言:javascript复制SELECT TIMESTAMPDIFF(HOUR, '2025-12-01 08:00:00', now());

计算距离高考日期代码语言:javascript复制SELECT

CURDATE() AS 当前日期,

CASE

WHEN CURDATE() <= CONCAT(YEAR(CURDATE()), '-06-07') THEN

CONCAT(YEAR(CURDATE()), '-06-07')

ELSE

CONCAT(YEAR(CURDATE()) + 1, '-06-07')

END AS 下次高考日期,

DATEDIFF(

CASE

WHEN CURDATE() <= CONCAT(YEAR(CURDATE()), '-06-07') THEN

CONCAT(YEAR(CURDATE()), '-06-07')

ELSE

CONCAT(YEAR(CURDATE()) + 1, '-06-07')

END,

CURDATE()

) AS 倒计时天数;

六、Unix时间戳相关函数

说明

UNIX_TIMESTAMP()

日期时间转时间戳

FROM_UNIXTIME()

时间戳转日期

示例:

上月今天的当前时间(时间戳)代码语言:javascript复制select unix_timestamp(date_sub(now(),interval 1 month));

将时间戳转换成日期代码语言:javascript复制select FROM_UNIXTIME(1705278645, '%Y-%m-%d %H:%s:%i')

七、其他实用函数函数

说明

LAST_DAY(date)

日期所在月份的最后一天

DAYNAME(date)

星期几的名称

MONTHNAME(date)

月份名称

SEC_TO_TIME(9527)

秒转换成时间

TIME_TO_SEC('02:38:47')

时间转换成秒

EXTRACT(unit FROM date)

从日期/时间值中提取指定的部分

示例:本月最后一天代码语言:javascript复制select last_day(curdate());

select last_day(date_sub(now(),interval 0 month));

本月天数代码语言:javascript复制select day(last_day(curdate()));

本月还剩多少天代码语言:javascript复制SELECT DATEDIFF(LAST_DAY(CURDATE()), CURDATE()) AS days_remaining;

SELECT DAY(LAST_DAY(CURDATE())) - DAY(CURDATE()) AS days_remaining;

SELECT TIMESTAMPDIFF(DAY, CURDATE(), LAST_DAY(CURDATE())) AS days_remaining;

提取年月和季度代码语言:javascript复制select EXTRACT(YEAR_MONTH FROM CURRENT_DATE()) AS '年月',EXTRACT(QUARTER FROM CURRENT_DATE()) AS '季度';

· · · · · END · · · · ·