MySQL:一文掌握数据库日期时间函数及用法
MySQL:一文掌握数据库日期时间函数及用法
在MySQL数据库中,日期时间函数是处理日期和时间数据的重要工具。无论是数据查询、数据处理还是数据展示,掌握这些函数都能大大提高开发效率。本文将详细介绍MySQL中常用的日期时间函数及其用法。
1. MySQL中的日期时间函数
CURDATE() 和 CURTIME():分别返回当前日期和当前时间。常用于获取系统当前日期和时间。
NOW():返回当前日期和时间的组合值,格式:YYYY-MM-DD HH:MM:SS,常用于记录事件发生的具体时间。
DATE() 和 TIME():分别提取日期和时间部分。例如,DATE('2023-10-05 14:30:00')返回 2023-10-05,而 TIME('2023-10-05 14:30:00') 返回 14:30:00。
YEAR()、MONTH() 和 DAY():分别提取日期中的年份、月份和日。
STR_TO_DATE() 和 DATE_FORMAT():用于将字符串转换为日期时间格式,或将日期时间格式化为字符串。
例如:STR_TO_DATE('2023-10-05', '%Y-%m-%d')
将字符串转换为日期,而
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
将当前日期时间格式化为指定的字符串格式。SYSDATE() 返回当前日期时间(与 NOW() 类似,但 SYSDATE() 在函数执行时动态获取值)。
SELECT SYSDATE();
EXTRACT(unit FROM date) 按指定单位提取日期时间部分(如 YEAR, MONTH, DAY, HOUR 等)。
SELECT EXTRACT(YEAR_MONTH FROM '2024-10-25');
2. 日期时间计算函数
- DATE_ADD 在MySQL中,DATE_ADD函数用于向指定的日期或时间值添加一个特定的时间间隔,并返回新的日期或时间值。用法为:
其中:DATE_ADD(date, INTERVAL expr unit)
- date表示要操作的日期或时间值,是一个日期、时间或日期时间类型的表达式;
- INTERVAL:关键字,用于指定要添加的时间间隔;
- expr:时间间隔的数量,可以是一个整数或表达式;
- unit:表示时间间隔的单位,常用的有:
MICROSECOND:微秒 SECOND:秒 MINUTE:分钟 HOUR:小时 DAY:天 WEEK:周 MONTH:月 QUARTER:季度 YEAR:年 SECOND_MICROSECOND:秒和微秒 MINUTE_MICROSECOND:分钟和微秒 MINUTE_SECOND:分钟和秒 HOUR_MICROSECOND:小时和微秒 HOUR_SECOND:小时和秒 HOUR_MINUTE:小时和分钟 DAY_MICROSECOND:天和微秒 DAY_SECOND:天和秒 DAY_MINUTE:天和分钟
DATE_ADD 使用示例
例1:向当前日期添加7天SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY)
假设当前日期是 2023-10-05,上述查询将返回 2023-10-12
例2:向指定日期添加1个月
SELECT DATE_ADD('2023-10-05', INTERVAL 1 MONTH)
上述查询将返回2023-11-05
例3:向当前时间添加3小时
SELECT DATE_ADD(CURTIME(), INTERVAL 3 HOUR)
假设当前时间是15:10:00,上述查询将返回18:10:00
例4:向指定日期时间添加1年和2个月
SELECT DATE_ADD('2023-10-05 14:30:00', INTERVAL 1 YEAR_MONTH)
DATE_SUB函数的基本语法
在MySQL中,DATE_SUB函数与DATE_ADD函数相对应,用于从指定的日期或时间值中减去一个特定的时间间隔,并返回新的日期或时间值。用法为:DATE_SUB(date, INTERVAL expr unit)
参数和DATE_ADD 的参数含义类似。
DATE_SUB 使用示例
例1:从当前日期减去7天SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY);
例2:从指定日期减去1个月
SELECT DATE_SUB('2024-10-05', INTERVAL 1 MONTH);
例3:从当前时间减去3小时
SELECT DATE_SUB(CURTIME(), INTERVAL 3 HOUR);
例4:从指定日期时间减去1年2个月
SELECT DATE_SUB('2024-10-05 14:30:00', INTERVAL 1 YEAR_MONTH);
上述查询将返回2023-08-05 14:30:00。
DATEDIFF(date1, date2) 计算两个日期之间的天数差(date1 - date2)。
SELECT DATEDIFF('2023-10-25', '2023-10-20'); -- 5
TIMEDIFF(time1, time2) 计算两个时间的差值(格式:HH:MM:SS)。
SELECT TIMEDIFF('14:30:00', '12:15:00'); -- 02:15:00
TIMESTAMPDIFF(unit, start, end) 按指定单位(如 YEAR, MONTH, DAY, HOUR)计算时间差。
SELECT TIMESTAMPDIFF(YEAR, '2000-05-20', '2023-10-25'); -- 23
3. 日期时间格式化
- DATE_FORMAT(date, format) 将日期时间按指定格式转换为字符串。
常用格式符:
- %Y:四位年份(2023)
- %y:两位年份(23)
- %m:两位月份(01-12)
- %d:两位日期(01-31)
- %H:24小时制小时(00-23)
- %i:分钟(00-59)
- %s:秒(00-59)
- %W:星期名(Wednesday)
- %M:月份名(October)
输出为:2025-02-16 15:43:56```sql SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
- STR_TO_DATE(str, format) 将字符串按指定格式转换为日期时间。
输出为:2025-02-16SELECT STR_TO_DATE('25-10-2023', '%d-%m-%Y');
4. 日期时间转换
UNIX_TIMESTAMP([date]) 将日期时间转换为 UNIX 时间戳(从 1970-01-01 开始的秒数)。
SELECT UNIX_TIMESTAMP('2023-10-25 14:30:45');
输出:1698251445
FROM_UNIXTIME(unix_timestamp[, format]) 将 UNIX 时间戳转换为日期时间,可选格式化。
SELECT FROM_UNIXTIME(1698251445);
输出:2023-10-25 14:30:45