针对日期时间数据,MySQL提供了几种类型和若干的日期时间函数供人们使用。常用的日期时间类型有year, date, time, datetime, timestamp;常用的日期时间函数有NOW(), CURDATE(), CURTIME(), UNIX_TIMESTAMP()等。
为了给大家一个直观的感受,首先来看下面这张表,包含了五种日期时间类型:
1 2 3 4 5 6 |
mysql> select * from table_time; +--------+------------+----------+---------------------+---------------------+ | t_year | t_date | t_time | t_datetime | t_timestamp | +--------+------------+----------+---------------------+---------------------+ | 2017 | 2017-11-09 | 16:49:37 | 2017-11-09 16:49:37 | 2017-11-09 16:49:37 | +--------+------------+----------+---------------------+---------------------+ |
1.日期时间类型
(1)year
year类型,存储年份,如上表所示,表现形式一般为YYYY。
(2)date
date类型,存储日期,如上表所示,表现形式一般为YYYY-MM-DD。
(3)time
time类型,存储时间,如上表所示,表现形式一般为HH:MM:SS。
(4)datetime
datetime类型,存储日期和时间,如上表所示,表现形式一般为YYYY-MM-DD HH:MM:SS。
(5)timestamp
timestamp类型,存储日期和时间,其表现形式和datetime类型一样为YYYY-MM-DD HH:MM:SS。
2.日期时间函数
(1)NOW()
返回当前的日期和时间,格式为YYYY-MM-DD HH:MM:SS。比如:
1 2 3 4 5 6 |
mysql> SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2017-11-14 17:07:56 | +---------------------+ |
(2)CURDATE()
返回当前的日期,格式为YYYY-MM-DD。比如:
1 2 3 4 5 6 |
mysql> SELECT CURDATE(); +------------+ | CURDATE() | +------------+ | 2017-11-14 | +------------+ |
(3)CURTIME()
返回当前的时间,格式为HH:MM:SS,比如:
1 2 3 4 5 6 |
mysql> SELECT CURTIME(), CURRENT_TIME(); +-----------+----------------+ | CURTIME() | CURRENT_TIME() | +-----------+----------------+ | 17:13:56 | 17:13:56 | +-----------+----------------+ |
其返回结果与函数CURRENT_TIME()相同。
(4)DATE()
提取指定日期时间或时间的日期部分,例如:
1 2 3 4 5 6 |
mysql> SELECT NOW(), DATE(NOW()); +---------------------+-------------+ | NOW() | DATE(NOW()) | +---------------------+-------------+ | 2017-11-14 17:15:49 | 2017-11-14 | +---------------------+-------------+ |
(5)DATE_SUB(date,INTERVAL expr type)
返回指定日期的时间间隔(减法),返回类型需要根据具体的间隔类型type而定,比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql> SELECT NOW(), DATE_SUB(NOW(), INTERVAL 1 DAY); +---------------------+---------------------------------+ | NOW() | DATE_SUB(NOW(), INTERVAL 1 DAY) | +---------------------+---------------------------------+ | 2017-11-14 17:32:29 | 2017-11-13 17:32:29 | +---------------------+---------------------------------+ 1 row in set mysql> SELECT NOW(), DATE_SUB(NOW(), INTERVAL 1 HOUR); +---------------------+----------------------------------+ | NOW() | DATE_SUB(NOW(), INTERVAL 1 HOUR) | +---------------------+----------------------------------+ | 2017-11-14 17:32:35 | 2017-11-14 16:32:35 | +---------------------+----------------------------------+ 1 row in set |
其中,type的常用取值有,YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND等等。
(6)DATE_ADD()
返回指定日期/日期时间的时间间隔(加法),类似于DATE_SUB()函数。
(7)EXTRACT(type FROM date)
从指定的日期或日期时间中提取具体的某一部分,比如:
1 2 3 4 5 6 |
mysql> SELECT NOW(), EXTRACT(DAY FROM NOW()); +---------------------+-------------------------+ | NOW() | EXTRACT(DAY FROM NOW()) | +---------------------+-------------------------+ | 2017-11-14 17:38:22 | 14 | +---------------------+-------------------------+ |
其中,type的常用取值有,YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND等等。
(8)DATEDIFF(date1, date2)
返回指定的date1和date2之间相差的天数,date1-date2,比如:
1 2 3 4 5 6 |
mysql> SELECT DATEDIFF('2017-11-14 16:32:35','2017-07-01 00:00:00'); +-------------------------------------------------------+ | DATEDIFF('2017-11-14 16:32:35','2017-07-01 00:00:00') | +-------------------------------------------------------+ | 136 | +-------------------------------------------------------+ |
(9)DATE_FORMAT()
返回指定格式的日期或日期时间,例如:
1 2 3 4 5 6 |
mysql> SELECT DATE_FORMAT(NOW(), '%h:%i:%s'); +--------------------------------+ | DATE_FORMAT(NOW(), '%h:%i:%s') | +--------------------------------+ | 05:51:31 | +--------------------------------+ |
(10)UNIX_TIMESTAMP()
返回指定时间的unix时间戳,即自1970年1月1日开始经过的秒数,比如:
1 2 3 4 5 6 |
mysql> SELECT UNIX_TIMESTAMP(NOW()); +-----------------------+ | UNIX_TIMESTAMP(NOW()) | +-----------------------+ | 1510653200 | +-----------------------+ |
3.其他
UNIX_TIMESTAMP()函数返回的unix时间戳,在linux开发环境中会经常用到。比如,C语言中的time_t类型即为unix时间戳、time()函数的返回值为unix时间戳、localtime()函数的形参类型为unix时间戳类型等等。
参考:
1.MySQL官方文档
可以多发表一些项目的代码块,或者项目的理解等,而不是课本上的学习笔记~