时间函数是大家在进行SQL查询时经常会接触到一类函数,同时他也是MySQL必会的四大函数之一,其中最常用到的函数是对于某一个时间戳我们获取想要的一部分,例如year()、month()等,这些函数可以帮助我们提高查询效率,用更加简洁易懂的形式实现一些需要复杂功能才能过实现的查询。
一、时间日期获取函数
获取当前日期(date)函数:curdate()
mysql> select curdate(); 2023-02-09
获取当前时间(time)函数:curtime()
select curtime(); 08:49:27
获取当前时间戳(date & time)函数:now()、sysdate()、current_timestamp、 current_timestamp()
select now(); 2023-02-09 08:51:04
select sysdate(); 2023-02-09 08:51:04
select current_timestamp,current_timestamp();
2023-02-09 08:53:42,2023-02-09 08:53:42
对于时间戳‘2023-02-09 08:51:04’,分别获取其年、月、日、时、分、秒
SELECT EXTRACT(YEAR FROM NOW()); # 2023
SELECT EXTRACT(MONTH FROM NOW()); # 2
SELECT EXTRACT(DAY FROM NOW()); # 9
SELECT EXTRACT(HOUR FROM NOW()); # 9
SELECT EXTRACT(MINUTE FROM NOW()); # 5
SELECT EXTRACT(SECOND FROM NOW()); # 30
select year(now());
select month(now());
select day(now());
select hour(now());
select minute(now());
select second(now())
二、时间日期转换函数
字符串转换为日期 函数:str_to_date(str, format)
select str_to_date('07/24/2020', '%m/%d/%Y'); -- 2020-07-24
select str_to_date('07/24/2020' , '%m/%d/%y'); -- 2020-07-24
select str_to_date('07.24.2020', '%m.%d.%Y'); -- 2020-07-24
select str_to_date('11:32:24', '%h:%i:%s'); -- 11:32:24
select str_to_date('07.24.2020 11:32:24', '%m.%d.%Y %h:%i:%s'); -- 2020-07-24 11:32:24
日期/时间转换为字符串 函数:date_format(date,format), time_format(time,format)
select date_format(now(), '%Y-%m-%d %H:%i:%s'); 2023-02-09 09:16:16
select date_format(now(), '%Y@%m@%d %H:%i:%s'); 2023@02@09 09:16:16
日期/天数转换 函数:to_days(date), from_days(days)
select to_days('0000-00-00'); -- 0(日期转换为天数)
select to_days('2020-07-24'); -- 737995(日期转换为天数)
select from_days(0); -- 0000-00-00(天数转换为日期)
select from_days(737995); -- 2020-07-24(天数转换为日期)
时间/秒转换 函数:time_to_sec(time), sec_to_time(seconds)
select time_to_sec('01:00:05'); -- 3605(时间转换为秒数)
select sec_to_time(3605); -- 01:00:05(秒数转换为时间)
拼凑日期/时间 函数:makdedate(year,dayofyear), maketime(hour,minute,second)
select makedate(2020,31); -- 2020-01-3(拼凑日期)
select makedate(2020,32); -- 2020-02-01(拼凑日期)
select maketime(12,15,30); -- 12:15:30(拼凑时间)
Unix时间戳/日期 转换函数
unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)
select unix_timestamp(); -- 1595563223
select unix_timestamp('2020-07-24'); -- 1595520000
select unix_timestamp('2020-07-24 12:02:05'); -- 1595563325
select from_unixtime(1595563223); -- 2020-07-24 12:00:23
select from_unixtime(1595520000); -- 2020-07-24 00:00:00
select from_unixtime(1595563325); -- 2020-07-24 12:02:05
select from_unixtime(1595563325, '%Y %D %M %h:%i:%s %x'); -- 2020 24th July 12:02:05 2020
三、时间日期计算函数
为日期增加一个时间间隔:date_add()
set @dt = now();
select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); -- sub 1 day
mysql> set @dt = '2020-07-24 12:02:05';
mysql> select date_add(@dt, interval '01:15:30' hour_second);
+------------------------------------------------+
| date_add(@dt, interval '01:15:30' hour_second) |
+------------------------------------------------+
| 2020-07-24 13:17:35 |
+------------------------------------------------+
mysql> select date_add(@dt, interval '1 01:15:30' day_second);
+-------------------------------------------------+
| date_add(@dt, interval '1 01:15:30' day_second) |
+-------------------------------------------------+
| 2020-07-25 13:17:35 |
+-------------------------------------------------+
为日期减去一个时间间隔:date_sub()
mysql> select date_sub('2020-07-24 12:02:05', interval '1 1:1:1' day_second);
+----------------------------------------------------------------+
| date_sub('2020-07-24 12:02:05', interval '1 1:1:1' day_second) |
+----------------------------------------------------------------+
| 2020-07-23 11:01:04 |
+----------------------------------------------------------------+
日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
mysql> select datediff('2020-07-08', '2020-07-01'); -- 7
mysql> select datediff('2020-07-01', '2020-07-08'); -- -7
mysql> select timediff('2020-07-24 13:17:35', '2020-07-24 00:00:00'); -- 13:17:35
mysql> select timediff('13:17:35', '00:00:00'); -- 13:17:35