获取当前日期时间
函数 |
格式 |
示例 |
返回数据 |
NOW() |
YYYY-MM-dd HH:mm:ss |
SELECT NOW(); |
2025-07-24 21:53:21 |
CURRENT_DATE() |
YYYY-MM-dd |
SELECT CURRENT_DATE(); |
2025-07-24 |
CURRENT_TIME() |
HH:mm:ss |
SELECT CURRENT_TIME(); |
21:57:06 |
CURRENT_TIMESTAMP() |
YYYY-MM-dd HH:mm:ss |
SELECT CURRENT_TIMESTAMP(); |
2025-07-24 21:57:34 |
UTC_DATE() |
YYYY-MM-dd |
SELECT UTC_DATE(); |
2025-07-24 |
UTC_TIME() |
HH:mm:ss |
SELECT UTC_TIME(); |
14:00:45 |
UTC_TIMESTAMP() |
YYYY-MM-dd HH:mm:ss |
SELECT UTC_TIMESTAMP(); |
2025-07-24 14:00:45 |
日期时间提取
函数 |
说明 |
示例 |
结果 |
YEAR(date) |
提取年份 |
SELECT YEAR('2025-07-24 08:00:00.1'); |
2025 |
MONTH(date) |
提取月份 |
SELECT MONTH('2025-07-24 08:00:00.1'); |
7 |
DAY(date) |
提取日(1-31) |
SELECT DAY('2025-07-24 08:00:00.1'); |
24 |
HOUR(date) |
提取小时 |
SELECT HOUR('2025-07-24 08:00:00.1'); |
8 |
MINUTE(date) |
提取分钟 |
SELECT MINUTE('2025-07-24 08:00:00.1'); |
0 |
SECOND(date) |
提取秒 |
SELECT SECOND('2025-07-24 08:00:00.1'); |
0 |
MICROSECOND(date) |
提取微秒 |
SELECT MICROSECOND('2025-07-24 08:00:00.1'); |
100000 |
WEEK(date) |
提取年中的第几周(周日作为第一周开始计算,类似于%U) |
SELECT SECOND('2025-07-24 08:00:00.1'); |
29 |
DAYOFWEEK(date) |
提取周的第几天(1=周日,7=周六) |
SELECT DAYOFWEEK('2025-07-24 08:00:00.1'); |
5 |
DAYOFMONTH(date) |
提取月的第几天 |
SELECT DAYOFMONTH('2025-07-24 08:00:00.1'); |
24 |
DAYOFYEAR(date) |
提取年的第几天 |
SELECT DAYOFYEAR('2025-07-24 08:00:00.1'); |
205 |
QUARTER(date) |
提取季度 |
SELECT QUARTER('2025-07-24 08:00:00.1'); |
3 |
DAYNAME(date) |
提取星期名称 |
SELECT DAYNAME('2025-07-24 08:00:00.1'); |
Thursday |
MONTHNAME(date) |
提取秒 |
SELECT MONTHNAME('2025-07-24 08:00:00.1'); |
July |
日期时间计算
日期加减
sql
复制代码
-- 2025-07-25 08:00:00.100000
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 DAY);
-- 2025-07-23 08:00:00.100000
SELECT DATE_SUB('2025-07-24 08:00:00.1', INTERVAL 1 DAY);
单位
单位 |
说明 |
示例 |
YEAR |
年 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 YEAR); |
QUARTER |
季度 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 QUARTER); |
MONTH |
月 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 MONTH); |
WEEK |
周 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 WEEK); |
DAY |
天 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 DAY); |
HOUR |
小时 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 HOUR); |
MINUTE |
分 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 MINUTE); |
SECOND |
秒 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 SECOND); |
MICROSECOND |
微秒 |
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 MICROSECOND); |
日期时间格式化
sql
复制代码
SELECT
DATE_FORMAT(NOW(), '%Y-%m-%d') AS fmt1, -- 2025-07-24
DATE_FORMAT(NOW(), '%d/%m/%Y') AS fmt2, -- 24/07/2025
DATE_FORMAT(NOW(), '%W, %M %e, %Y') AS fmt3, -- Thursday, July 24, 2025
DATE_FORMAT(NOW(), '%H:%i:%s') AS fmt4, -- 22:33:23
DATE_FORMAT(NOW(), '%l:%i %p') AS fmt5; -- 10:33 PM
符号 |
说明 |
示例 |
%Y |
4位年份 |
2025 |
%y |
2位年份 |
25 |
%m |
月份(00-12) |
07 |
%c |
月份(0-12) |
7 |
%M |
月份名称 |
July |
%b |
月份简写 |
Jul |
%d |
日(00-31) |
01 |
%e |
日(0-31) |
1 |
%D |
英文后缀的日 |
1st |
%H |
小时(00-23) |
01 |
%h |
小时(01-12) |
01 |
%l |
小时(01-12) |
01 |
%i |
分钟 (00-59) |
01 |
%s |
秒(00-59) |
01 |
%f |
微秒 (000000-999999) |
|
%p |
AM/PM |
PM |
%W |
星期名称 |
Tuesday |
%a |
星期缩写 |
Tue |
%w |
星期数字 (0=周日) |
4 |
%U |
周 (00-53) 周日开始 |
29 |
%u |
周 (00-53) 周一开始 |
30 |
日期时间转换
函数 |
说明 |
示例 |
STR_TO_DATE(str, format) |
字符串转日期 |
SELECT STR_TO_DATE('24,07,2025', '%d,%m,%Y'); |
FROM_UNIXTIME(ts, format) |
Unix时间戳转日期 |
SELECT FROM_UNIXTIME(1753286400, '%Y-%m-%d'); |
UNIX_TIMESTAMP(date) |
转为Unix时间戳 |
SELECT UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP('2025-07-24'); |
日期时间比较
函数 |
说明 |
示例 |
DATEDIFF(date1, date2) |
相差天数(date1-date2) |
SELECT DATEDIFF('2025-07-24', '2025-07-26'); -2 |
TIMEDIFF(time1, time2) |
相差小时(time1-time2) |
SELECT TIMEDIFF('2025-07-24 00:00:00', '2025-07-24 01:00:00'); -1 |
TIMESTAMPDIFF(unit, date1, date2) |
相差时间,单位unit,date2-date1 |
SELECT TIMESTAMPDIFF(MINUTE, '2025-07-24 00:00:00', '2025-07-24 01:00:00'); 60 |
特殊日期函数
函数 |
说明 |
示例 |
LAST_DAY(date) |
月份最后一天 |
SELECT LAST_DAY('2025-07-24 00:00:00'); 2025-07-31 |
MAKEDATE(year, dayofyear) |
根据年+天数创建日期 |
SELECT MAKEDATE(2025, 32); 2025-02-01 |
MAKETIME(hour,minute,second) |
创建时间 |
SELECT MAKETIME(13, 1, 1); 13:01:01 |
PERIOD_ADD(period, months) |
增加月份 |
SELECT PERIOD_ADD(202501,1); 202502 |
PERIOD_DIFF(period1, period2) |
相差月份 |
SELECT PERIOD_DIFF(202501, 202502); -1 |
TO_DAYS(date) |
从0000-00-00计算天数 |
SELECT TO_DAYS('0000-01-01'); 1 |
FROM_DAYS(days) |
将天数转为日期 |
SELECT FROM_DAYS(366); 1 |
|
|
|
实用案例
计算年龄
sql
复制代码
SELECT
birth_date,
TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age
FROM users;
获取本周第一天
sql
复制代码
-- 获取本周第一天(周一为第一天)
SELECT DATE_ADD(CURDATE(), INTERVAL 2 - DAYOFWEEK(CURDATE()) DAY);
月末处理
sql
复制代码
-- 最后一天则是月末订单否则是普通订单
SELECT
order_date,
IF(order_date = LAST_DAY(order_date), '月末订单', '普通订单') AS order_type
FROM orders;
时间范围查询
sql
复制代码
-- 查询最近 1h 以内的日志数据
SELECT *
FROM logs
WHERE log_time BETWEEN
DATE_SUB(NOW(), INTERVAL 1 HOUR) AND NOW();
今天起下个工作日计算(排除周末)
sql
复制代码
SELECT
start_date,
DATE_ADD(start_date, INTERVAL 5 DAY) AS end_date_naive,
DATE_ADD(
start_date,
INTERVAL 5 +
(2 * (WEEK(DATE_ADD(start_date, INTERVAL 5 DAY)) - WEEK(start_date))) DAY
) AS end_date_adjusted
FROM projects;
提取JSON字段值
sql
复制代码
SELECT JSON_EXTRACT(json_column, '$.key_name') FROM table_name;