在数据库操作中,对日期和时间的精确处理至关重要。MySQL提供了丰富的内置函数以满足各类日期、时间和日期时间相关的计算需求。
从获取当前日期时间(如NOW()和CURRENT_DATE()),到格式化显示(DATE_FORMAT()和STR_TO_DATE()),以及进行复杂的日期计算(DATE_ADD(), DATE_SUB()和DATEDIFF()等),这些函数极大地简化了数据处理流程。
此外,MySQL还支持日期部分提取(DAY(), MONTH(), YEAR()等)、日期时间转换(FROM_UNIXTIME(), UNIX_TIMESTAMP())、日期判断(DAYOFWEEK(), DAYOFMONTH(), DAYOFYEAR())等功能。本文将详细解析这些MySQL日期时间处理函数的用法,并通过实例展示如何在实际场景中灵活运用。
1. 获取当前日期和时间
函数 |
描述 |
使用方法 |
NOW() |
返回当前的日期和时间 |
SELECT NOW(); |
CURRENT_TIMESTAMP 或 CURRENT_TIMESTAMP() |
同 NOW(),返回当前日期和时间 |
SELECT CURRENT_TIMESTAMP(); |
CURDATE() 或 CURRENT_DATE() |
返回当前日期 |
SELECT CURDATE(); |
CURTIME() 或 CURRENT_TIME() |
返回当前时间 |
SELECT CURTIME(); |
2. 日期格式化
函数 |
描述 |
使用方法 |
DATE_FORMAT(date, format) |
按指定格式显示日期/时间值 |
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); |
STR_TO_DATE(str, format) |
将字符串按指定格式转换为日期 |
SELECT STR_TO_DATE('2022-12-31', '%Y-%m-%d'); |
3. 日期计算
函数 |
描述 |
使用方法 |
DATE_ADD(date, INTERVAL expr unit) |
在日期上加上一个时间间隔 |
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH); |
DATE_SUB(date, INTERVAL expr unit) |
从日期中减去一个时间间隔 |
SELECT DATE_SUB(NOW(), INTERVAL 1 DAY); |
DATEDIFF(date1, date2) |
返回两个日期之间的天数差 |
SELECT DATEDIFF('2023-01-01', '2022-12-01'); |
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2) |
返回两个日期时间表达式的差值 |
SELECT TIMESTAMPDIFF(MONTH, '2022-01-01', '2022-12-31'); |
4. 日期提取
函数 |
描述 |
使用方法 |
DAY(date) |
提取日期的日部分 |
SELECT DAY('2022-12-31'); |
MONTH(date) |
提取日期的月部分 |
SELECT MONTH('2022-12-31'); |
YEAR(date) |
提取日期的年部分 |
SELECT YEAR('2022-12-31'); |
HOUR(time) |
提取时间的小时部分 |
SELECT HOUR('14:30:00'); |
MINUTE(time) |
提取时间的分钟部分 |
SELECT MINUTE('14:30:00'); |
SECOND(time) |
提取时间的秒部分 |
SELECT SECOND('14:30:00'); |
WEEK(date) 或 WEEKOFYEAR(date) |
返回日期所在的年份中的周数 |
SELECT WEEK('2022-12-31'); |
5. 日期比较
函数 |
描述 |
使用方法(注:MySQL不支持DATE_CMP函数) |
DATE_CMP(date1, date2) |
比较两个日期值(使用<, >, =等操作符替代) |
SELECT (date1 > date2) - (date1 < date2) AS cmp_result; |
6. 日期时间转换
函数 |
描述 |
使用方法 |
FROM_UNIXTIME(unix_timestamp) |
将UNIX时间戳转换为日期时间格式 |
SELECT FROM_UNIXTIME(1609459200); |
UNIX_TIMESTAMP(date) 或 UNIX_TIMESTAMP() |
返回日期时间值的UNIX时间戳或当前的UNIX时间戳 |
SELECT UNIX_TIMESTAMP(NOW()); |
7. 日期判断
函数 |
描述 |
使用方法 |
DAYOFWEEK(date) |
返回日期是星期几(1 = 周日,2 = 周一,...,7 = 周六) |
SELECT DAYOFWEEK('2022-12-31'); |
DAYOFMONTH(date) |
返回日期是一个月中的第几天(1 到 31) |
SELECT DAYOFMONTH('2022-12-31'); |
DAYOFYEAR(date) |
返回日期是一年中的第几天(1 到 366) |
SELECT DAYOFYEAR('2022-12-31'); |