MySQL作为一款广泛使用的关系型数据库管理系统,提供了丰富的日期函数来满足各种日期和时间处理需求
本文将全面介绍MySQL中的日期函数,包括获取当前日期和时间、提取日期和时间部分、日期和时间的计算、格式化以及比较与判断函数,并通过实战案例展示这些函数的应用
一、日期和时间获取函数 1. NOW() `NOW()`函数用于返回当前的日期和时间,格式为`YYYY-MM-DD HH:MM:SS`
这个函数在需要同时获取当前日期和时间时非常有用
sql SELECT NOW(); 输出结果类似于`2025-07-1214:30:45`,表示当前的中国北京时间
2. CURDATE() / CURRENT_DATE() `CURDATE()`和`CURRENT_DATE()`函数用于返回当前的日期,格式为`YYYY-MM-DD`
这两个函数是等价的,可以根据个人喜好选择使用
sql SELECT CURDATE(); 输出结果类似于`2025-07-12`
3. CURTIME() / CURRENT_TIME() `CURTIME()`和`CURRENT_TIME()`函数用于返回当前的时间,格式为`HH:MM:SS`
同样,这两个函数也是等价的
sql SELECT CURTIME(); 输出结果类似于`14:30:45`
4. UTC_DATE() / UTC_TIME() `UTC_DATE()`函数返回当前的UTC日期(不包含时间),而`UTC_TIME()`函数返回当前的UTC时间(不包含日期)
这两个函数在处理跨时区数据时非常有用
sql SELECT UTC_DATE();-- 返回UTC日期 SELECT UTC_TIME();-- 返回UTC时间 5. SYSDATE() `SYSDATE()`函数同样用于返回当前的日期和时间,格式为`YYYY-MM-DD HH:MM:SS`
与`NOW()`不同的是,`SYSDATE()`在函数执行时获取时间,而`NOW()`在语句开始执行时获取时间
这在需要精确到函数执行瞬间的场景中非常有用
sql SELECT SYSDATE(); 二、提取日期和时间部分信息 1. YEAR(), MONTH(), DAY() `YEAR(date)`、`MONTH(date)`和`DAY(date)`函数分别用于提取日期中的年份、月份和天数部分
sql SELECT YEAR(2025-07-12);-- 输出:2025 SELECT MONTH(2025-07-12); -- 输出:7 SELECT DAY(2025-07-12);-- 输出:12 2. HOUR(), MINUTE(), SECOND() `HOUR(time)`、`MINUTE(time)`和`SECOND(time)`函数分别用于提取时间中的小时数、分钟数和秒数部分
sql SELECT HOUR(14:30:45);-- 输出:14 SELECT MINUTE(14:30:45); -- 输出:30 SELECT SECOND(14:30:45); -- 输出:45 3. WEEKDAY(), DAYNAME(), MONTHNAME() `WEEKDAY(date)`函数返回日期对应的星期索引(0表示星期一,6表示星期日),`DAYNAME(date)`函数返回日期对应的星期名称,而`MONTHNAME(date)`函数返回日期对应的月份名称
sql SELECT WEEKDAY(2025-07-12);-- 输出: 星期六对应的索引值(具体值根据MySQL内部实现而定) SELECT DAYNAME(2025-07-12);-- 输出: Saturday SELECT MONTHNAME(2025-07-12); -- 输出: July 4. QUARTER() `QUARTER(date)`函数返回日期所在的季度(1-4)
sql SELECT QUARTER(2025-07-12); -- 输出:3 三、日期和时间的计算函数 1. DATE_ADD(), DATE_SUB() `DATE_ADD(date, INTERVAL expr unit)`和`DATE_SUB(date, INTERVAL expr unit)`函数分别用于在指定日期上增加和减去一段时间间隔
`expr`表示要添加或减去的时间量,`unit`表示时间单位(如SECOND、MINUTE、HOUR、DAY、MONTH、YEAR)
sql SELECT DATE_ADD(2025-07-12, INTERVAL7 DAY);-- 输出:2025-07-19 SELECT DATE_SUB(2025-07-12, INTERVAL1 MONTH); -- 输出:2025-06-12 `ADDDATE()`和`SUBDATE()`函数是`DATE_ADD()`和`DATE_SUB()`的同义词,功能相同
2. DATEDIFF() `DATEDIFF(date1, date2)`函数返回两个日期之间相差的天数
`date1`是结束日期,`date2`是开始日期
sql SELECT DATEDIFF(2025-07-12, 2025-07-01); -- 输出:11 3. TIMESTAMPDIFF() `TIMESTAMPDIFF(unit, datetime1, datetime2)`函数返回两个日期时间之间的间隔,`unit`可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND等
sql SELECT TIMESTAMPDIFF(DAY, 2025-07-01, 2025-07-12); -- 输出:11 SELECT TIMESTAMPDIFF(HOUR, 2025-07-1200:00:00, 2025-07-1212:00:00); -- 输出:12 4. LAST_DAY() `LAST_DAY(date)`函数返回指定月份的最后一天
sql SELECT LAST_DAY(2025-07-12); -- 输出:2025-07-31 四、日期和时间的格式化函数 1. DATE_FORMAT(), TIME_FORMAT() `DATE_FORMAT(date, format)`和`TIME_FORMAT(time, format)`函数分别用于将日期和时间按照指定的格式进行格式化
常用的格式代码包括:`%Y`(四位年份)、`%y`(两位年份)、`%m`(两位月份)、`%b`(月份缩写)、`%M`(月份全称)、`%d`(两位日期)、`%H`(24小时制小时数)、`%h`(12小时制小时数)、`%i`(分钟数)、`%s`(秒数)等
sql SELECT DATE_FORMAT(NOW(), %Y-%m-%d %H:%i:%s); -- 输出类似于:2025-07-1214:30:45 SELECT TIME_FORMAT(CURTIME(), %h:%i:%s %p);-- 输出类似于:02:30:45 PM(具体输出取决于当前时间) 2. STR_TO_DATE(), FROM_UNIXTIME(), UNIX_TIMESTAMP() `STR_TO_DATE(str, format)`函数用于将字符串转换为日期时间格式,`FROM_UNIXTIME(unix_timestamp, format)`函数用于将UNIX时间戳转换为日期时间格式,而`UNIX_TIMESTAMP(datetime)`函数则用于将日期时间转换为UNIX时间戳
sql SELECT STR_TO_DATE(12-07-2025, %d-%m-%Y);-- 输出:2025-07-12 SELECT FROM_UNIXTIME(1689273600); -- 输出:2025-07-1200:00:00(