MySQL 提供了丰富的函数来处理日期和时间。这些函数可以用于获取当前时间、格式化日期、计算日期差值等操作。以下是 MySQL 中常用的日期和时间处理函数的分类及其用途。
1. 获取当前日期和时间
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
NOW() | 返回当前日期和时间 | SELECT NOW(); | 2024-12-09 12:30:45 |
CURDATE() | 返回当前日期 | SELECT CURDATE(); | 2024-12-09 |
CURTIME() | 返回当前时间 | SELECT CURTIME(); | 12:30:45 |
SYSDATE() | 返回执行函数时的日期和时间(更精确) | SELECT SYSDATE(); | 2024-12-09 12:30:45 |
2. 格式化日期和时间
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
DATE_FORMAT() | 将日期格式化为指定格式 | SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); | 2024-12-09 |
TIME_FORMAT() | 将时间格式化为指定格式 | SELECT TIME_FORMAT(NOW(), '%H:%i'); | 12:30 |
DAYNAME() | 返回日期的星期名 | SELECT DAYNAME('2024-12-09'); | Monday |
MONTHNAME() | 返回日期的月份名 | SELECT MONTHNAME('2024-12-09'); | December |
常见的格式化符号:
%Y
: 四位年份(如 2024)%m
: 两位月份(如 12)%d
: 两位日期(如 09)%H
: 小时(24 小时制)%i
: 分钟%s
: 秒
3. 提取日期和时间的组成部分
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
YEAR() | 返回日期中的年份 | SELECT YEAR('2024-12-09'); | 2024 |
MONTH() | 返回日期中的月份(数字) | SELECT MONTH('2024-12-09'); | 12 |
DAY() | 返回日期中的天 | SELECT DAY('2024-12-09'); | 9 |
HOUR() | 返回时间中的小时 | SELECT HOUR('12:30:45'); | 12 |
MINUTE() | 返回时间中的分钟 | SELECT MINUTE('12:30:45'); | 30 |
SECOND() | 返回时间中的秒 | SELECT SECOND('12:30:45'); | 45 |
WEEK() | 返回日期所在的周(1-53) | SELECT WEEK('2024-12-09'); | 50 |
DAYOFWEEK() | 返回日期对应的星期几(1-7,周日为1) | SELECT DAYOFWEEK('2024-12-09'); | 2 |
4. 日期和时间的运算
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
DATEDIFF() | 计算两个日期的差值(天数) | SELECT DATEDIFF('2024-12-25', '2024-12-09'); | 16 |
TIMESTAMPDIFF(unit, d1, d2) | 返回两个日期之间的差值,指定单位(年/月/天等) | SELECT TIMESTAMPDIFF(DAY, '2024-12-09', '2024-12-25'); | 16 |
ADDDATE() 或 DATE_ADD() | 增加指定间隔到日期 | SELECT ADDDATE('2024-12-09', INTERVAL 10 DAY); | 2024-12-19 |
SUBDATE() 或 DATE_SUB() | 从日期中减去指定间隔 | SELECT SUBDATE('2024-12-09', INTERVAL 10 DAY); | 2024-11-29 |
单位包括:
SECOND
MINUTE
HOUR
DAY
MONTH
YEAR
5. 其他常用函数
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
LAST_DAY() | 返回给定日期的最后一天 | SELECT LAST_DAY('2024-12-09'); | 2024-12-31 |
TO_DAYS() | 返回日期距公元 0 年 1 月 1 日的天数 | SELECT TO_DAYS('2024-12-09'); | 738904 |
FROM_DAYS() | 将天数转换为日期 | SELECT FROM_DAYS(738904); | 2024-12-09 |
STR_TO_DATE() | 将字符串转换为日期 | SELECT STR_TO_DATE('09-12-2024', '%d-%m-%Y'); | 2024-12-09 |
常见案例
-
获取某月的订单数量:
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, COUNT(*) AS order_count FROM orders GROUP BY month;
-
计算用户注册天数:
SELECT user_id, DATEDIFF(NOW(), registration_date) AS days_since_registration FROM users;
-
获取上个月的第一天和最后一天:
SELECT DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE())-1 DAY) AS first_day, LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) AS last_day;
总结
MySQL 提供了多种日期函数,方便开发者处理复杂的日期和时间逻辑。在编写查询时,根据实际需求选择合适的函数,并注意格式化符号的使用。