在 MySQL 中,时间处理函数非常常用,适用于日期、时间的查询和格式化等操作。以下是一些常用的时间处理函数及其示例查询。
1. 获取当前日期和时间
-
NOW():获取当前日期和时间(带时分秒)。
SELECT NOW(); -- 输出示例: 2024-10-28 15:00:00
-
CURDATE():获取当前日期(不带时分秒)。
SELECT CURDATE(); -- 输出示例: 2024-10-28
-
CURTIME():获取当前时间(仅时分秒)。
SELECT CURTIME(); -- 输出示例: 15:00:00
2. 日期和时间的格式化
-
DATE_FORMAT():将日期格式化为特定格式。
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date; -- %Y: 年, %m: 月, %d: 日, %H: 时, %i: 分, %s: 秒
- 常用格式:
'%Y-%m-%d'
:年-月-日'%d/%m/%Y'
:日/月/年'%H:%i:%s'
:时:分:秒
- 常用格式:
3. 日期和时间加减
-
DATE_ADD():向日期添加时间。
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); -- 当前时间加1天 SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH); -- 当前时间加1月
-
DATE_SUB():从日期中减去时间。
SELECT DATE_SUB(NOW(), INTERVAL 1 DAY); -- 当前时间减1天 SELECT DATE_SUB(NOW(), INTERVAL 1 YEAR); -- 当前时间减1年
4. 日期的提取
-
YEAR():提取年份。
SELECT YEAR(NOW()); -- 获取当前年份,如: 2024
-
MONTH():提取月份。
SELECT MONTH(NOW()); -- 获取当前月份,如: 10
-
DAY():提取日。
SELECT DAY(NOW()); -- 获取当前日期中的日,如: 28
-
HOUR()、MINUTE()、SECOND():提取时间中的时、分、秒。
SELECT HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
5. 时间差计算
-
DATEDIFF():计算两个日期之间的天数差。
SELECT DATEDIFF('2024-12-25', NOW()); -- 计算当前日期到2024-12-25的天数差
-
TIMESTAMPDIFF():计算时间差(支持年、月、日、小时、分钟、秒等)。
SELECT TIMESTAMPDIFF(MONTH, '2023-01-01', NOW()); -- 计算当前日期与指定日期间的月数差 SELECT TIMESTAMPDIFF(HOUR, '2024-10-28 12:00:00', NOW()); -- 小时差
6. 时间戳的转换
-
UNIX_TIMESTAMP():将日期转换为 Unix 时间戳(自 1970 年 1 月 1 日以来的秒数)。
SELECT UNIX_TIMESTAMP(NOW()); -- 将当前时间转换为时间戳
-
FROM_UNIXTIME():将 Unix 时间戳转换为日期格式。
SELECT FROM_UNIXTIME(1698508800); -- 将时间戳转换为日期格式
7. 获取月份的第一天和最后一天
-
LAST_DAY():获取指定日期所在月份的最后一天。
SELECT LAST_DAY(NOW()); -- 获取当前月份的最后一天
-
获取月份的第一天:结合
DATE_FORMAT
和CURDATE()
。SELECT DATE_FORMAT(CURDATE(), '%Y-%m-01'); -- 当前月份的第一天
8. 获取特定日期的信息
-
DAYOFWEEK():返回一周的第几天(1=星期日,7=星期六)。
SELECT DAYOFWEEK(NOW()); -- 获取当前日期是一周中的第几天
-
DAYOFYEAR():返回一年中的第几天。
SELECT DAYOFYEAR(NOW()); -- 获取当前日期是一年中的第几天
-
WEEK():返回一年中的第几周。
SELECT WEEK(NOW()); -- 获取当前日期是一年中的第几周
9. 比较日期和时间
-
日期相等比较:
SELECT * FROM table_name WHERE date_column = CURDATE(); -- 查询日期等于今天的数据
-
时间区间查询:
SELECT * FROM table_name WHERE date_column BETWEEN '2024-10-01' AND '2024-10-28';
10. 常用查询示例
-
获取当天新增的数据:
SELECT * FROM table_name WHERE DATE(date_column) = CURDATE();
-
获取最近 7 天的数据:
SELECT * FROM table_name WHERE date_column >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);
-
按年、月统计数据量:
SELECT YEAR(date_column) AS year, MONTH(date_column) AS month, COUNT(*) AS count FROM table_name GROUP BY year, month;
这些 MySQL 时间处理函数和查询示例可以帮助在日期和时间的操作中灵活地完成各种需求。