一、 时间、日期获取
1.1 获取当前本地的日期和时间
1 2 3 4 5 6
| SELECT NOW(), CURRENT_TIMESTAMP(), LOCALTIME(), LOCALTIMESTAMP(), SYSDATE();
|
上面5个函数都可以获取当前本地时间,但SYSDATE有所不同。
1
| SELECT NOW(), SLEEP(3), NOW();
|
执行结果:
1 2
| NOW() sleep(3) NOW() 2017-11-09 17:21:09 0 2017-11-09 17:21:09
|
虽然sleep了3秒,但NOW()前后2次获取到时间是一样的,也就是说NOW()函数获取的时间是在整个SQL语句开始执行时的时间,无论SQL语句中有多少个NOW()函数,获取到的时间都是一样的。
CURRENT_TIMESTAMP()
, LOCALTIME()
, LOCALTIMESTAMP()
和NOW()函数一样。
但SYSDATE
不同,它获取到的是SYSDATE()函数执行时的实时时间:
1
| SELECT SYSDATE(), SLEEP(3), SYSDATE();
|
执行结果:
1 2
| SYSDATE() sleep(3) SYSDATE() 2017-11-09 17:25:05 0 2017-11-09 17:25:08
|
1.2 获取当前本地的日期
1 2 3
| SELECT CURDATE(), CURRENT_DATE();
|
1.3 获取当前本地的时间
1 2 3
| SELECT CURTIME(), CURRENT_TIME();
|
1.4 获取当前UTC日期和时间
1 2
| SELECT UTC_TIMESTAMP();
|
1.5 获取当前UTC日期
1.6 获取当前UTC时间
1.7 获取时间戳(自1970年经过的秒)
1 2
| SELECT UNIX_TIMESTAMP(); SELECT UNIX_TIMESTAMP('2017-11-09 12:30:00');
|
二、 时间操作
2.1 从字符串提取时间和日期
1 2 3 4 5 6 7 8 9 10 11 12 13
| SET @dt = '2008-09-10 07:15:30.123456';
SELECT DATE(@dt); SELECT TIME(@dt); SELECT YEAR(@dt); SELECT QUARTER(@dt); SELECT MONTH(@dt); SELECT WEEK(@dt); SELECT DAY(@dt); SELECT HOUR(@dt); SELECT MINUTE(@dt); SELECT SECOND(@dt); SELECT MICROSECOND(@dt);
|
2.2 获取某天在周、月、年中所处位置
1 2 3 4 5
| SET @dt = '2017-11-09';
SELECT DAYOFWEEK(@dt); SELECT DAYOFMONTH(@dt); SELECT DAYOFYEAR(@dt);
|
2.3 获取指定日期的最后一天
1
| SELECT LAST_DAY('2017-02-05');
|
2.4 时间加减
1 2 3 4 5 6 7 8 9 10 11 12
| SET @dt = "2017-11-09 17:10:20.0000001";
SELECT DATE_ADD(@dt, INTERVAL 1 DAY); SELECT DATE_ADD(@dt, INTERVAL 2 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);
|
2.5 两个日期、时间加减
1 2
| SELECT DATEDIFF('2008-08-08', '2008-08-01'); SELECT DATEDIFF('2008-08-01', '2008-08-08');
|
1 2
| SELECT TIMEDIFF('2008-08-08 08:08:08', '2008-08-08 00:00:00'); SELECT TIMEDIFF('00:00:00', '08:08:08');
|
2.6 时间格式化
1 2 3
| SELECT DATE_FORMAT('2008-08-08 22:23:00', '%W %M %Y'); SELECT DATE_FORMAT('2008-08-08 22:23:01', '%Y%m%d%H%i%s'); SELECT TIME_FORMAT('22:23:01', '%H.%i.%s');
|
2.7 秒计算
计算指定时间折合多少秒,如00:01:00表示1分钟,等于60秒。
1 2
| SELECT TIME_TO_SEC('01:00:05'); SELECT SEC_TO_TIME(3605);
|