获取当前日期时间
函数 | 格式 | 示例 | 返回数据 |
---|
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 |
日期时间计算
日期加减
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 DAY);
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); |
日期时间格式化
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') AS fmt1, DATE_FORMAT(NOW(), '%d/%m/%Y') AS fmt2, DATE_FORMAT(NOW(), '%W, %M %e, %Y') AS fmt3, DATE_FORMAT(NOW(), '%H:%i:%s') AS fmt4, DATE_FORMAT(NOW(), '%l:%i %p') AS fmt5;
符号 | 说明 | 示例 |
---|
%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 |
| | |
实用案例
计算年龄
SELECT birth_date,TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age
FROM users;
获取本周第一天
SELECT DATE_ADD(CURDATE(), INTERVAL 2 - DAYOFWEEK(CURDATE()) DAY);
月末处理
SELECT order_date,IF(order_date = LAST_DAY(order_date), '月末订单', '普通订单') AS order_type
FROM orders;
时间范围查询
SELECT *
FROM logs
WHERE log_time BETWEEN DATE_SUB(NOW(), INTERVAL 1 HOUR) AND NOW();
今天起下个工作日计算(排除周末)
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字段值
SELECT JSON_EXTRACT(json_column, '$.key_name') FROM table_name;