MySQL日期函数
1:获取系统当前日期和时间
NOW(),LOCALTIME(),LOCALTIMESTAMP(),CURDATE(),CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP(),SYSDATE()
mysql> SELECT NOW(),LOCALTIME(),LOCALTIMESTAMP();
+---------------------+---------------------+---------------------+
| NOW() | LOCALTIME() | LOCALTIMESTAMP() |
+---------------------+---------------------+---------------------+
| 2018-07-02 20:14:27 | 2018-07-02 20:14:27 | 2018-07-02 20:14:27 |
+---------------------+---------------------+---------------------+
mysql> SELECT CURDATE(),CURRENT_DATE(),CURRENT_TIME();
+------------+----------------+----------------+
| CURDATE() | CURRENT_DATE() | CURRENT_TIME() |
+------------+----------------+----------------+
| 2018-07-02 | 2018-07-02 | 20:16:33 |
+------------+----------------+----------------+
mysql> SELECT CURRENT_TIMESTAMP(),SYSDATE();
+---------------------+---------------------+
| CURRENT_TIMESTAMP() | SYSDATE() |
+---------------------+---------------------+
| 2018-07-02 20:17:17 | 2018-07-02 20:17:17 |
+---------------------+---------------------+
1 row in set (0.00 sec)
2:DATE(date)
返回date的日期部分
mysql> SELECT DATE('2018-07-01 10:00:00');
+-----------------------------+
| DATE('2018-07-01 10:00:00') |
+-----------------------------+
| 2018-07-01 |
+-----------------------------+
1 row in set (0.00 sec)
3:DATE_ADD(date,INTERVAL expr type)
给日期添加指定的时间间隔;expr 参数是您希望添加的时间间隔
mysql> select date_add('2018-01-01',interval 2 day);
+---------------------------------------+
| date_add('2018-01-01',interval 2 day) |
+---------------------------------------+
| 2018-01-03 |
+---------------------------------------+
mysql> SELECT DATE_ADD('2018-01-01',INTERVAL 1 MONTH);
+-----------------------------------------+
| DATE_ADD('2018-01-01',INTERVAL 1 MONTH) |
+-----------------------------------------+
| 2018-02-01 |
+-----------------------------------------+
4:DATE_SUB(date,INTERVAL expr type)
从日期减去指定的时间间隔
mysql> select date_sub('2018-01-01 18:00:00',interval 2 hour);
+-------------------------------------------------+
| date_sub('2018-01-01 18:00:00',interval 2 hour) |
+-------------------------------------------------+
| 2018-01-01 16:00:00 |
+-------------------------------------------------+
mysql> select date_sub('2018-12-01',interval 1 year);
+----------------------------------------+
| date_sub('2018-12-01',interval 1 year) |
+----------------------------------------+
| 2017-12-01 |
+----------------------------------------+
5:DATEDIFF(date1,date2)
返回两个日期之间的天数
mysql> select datediff('2018-03-10','2018-04-10');
+-------------------------------------+
| datediff('2018-03-10','2018-04-10') |
+-------------------------------------+
| -31 |
+-------------------------------------+
mysql> select datediff('2018-04-10','2018-03-10');
+-------------------------------------+
| datediff('2018-04-10','2018-03-10') |
+-------------------------------------+
| 31 |
+-------------------------------------+
6:DATE_FORMAT()
用不同的格式显示日期/时间
mysql> select date_format(now(),'%H:%i:%s %m-%d-%Y');
+----------------------------------------+
| date_format(now(),'%H:%i:%s %m-%d-%Y') |
+----------------------------------------+
| 20:59:26 07-02-2018 |
+----------------------------------------+
7:EXTRACT()
返回日期/时间的单独部分,比如年、月、日、小时、分钟等等
mysql> select extract(year from '2018-06-06');
+---------------------------------+
| extract(year from '2018-06-06') |
+---------------------------------+
| 2018 |
+---------------------------------+
mysql> select extract(day from '2018-06-06');
+--------------------------------+
| extract(day from '2018-06-06') |
+--------------------------------+
| 6 |
+--------------------------------+
mysql> select extract(second from '2018-06-06 16:16:17');
+--------------------------------------------+
| extract(second from '2018-06-06 16:16:17') |
+--------------------------------------------+
| 17 |
+--------------------------------------------+
8:DAYNAME(),MONTHNAME() ,DAYOFWEEK()
DAYNAME()返回日期的星期名;
返回日期的月份名字
DAYOFWEEK()返回值 1-周日 2-周一 3-周二….7-周六
mysql> select dayname(now());
+----------------+
| dayname(now()) |
+----------------+
| Monday |
+----------------+
mysql> select monthname('2018-07-01');
+-------------------------+
| monthname('2018-07-01') |
+-------------------------+
| July |
+-------------------------+
mysql> select dayofweek(now());
+------------------+
| dayofweek(now()) |
+------------------+
| 2 |
+------------------+
9:DAY(date)
返回date中的日期
mysql> select day('2018-01-15');
+-------------------+
| day('2018-07-15') |
+-------------------+
| 15 |
+-------------------+
10:DAYOFWEEK(date),WEEKDAY(date)
DAYOFWEEK返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六);
WEEKDAY返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)
mysql> select dayofweek('2018-07-02');
+-------------------------+
| dayofweek('2018-07-02') |
+-------------------------+
| 2 |
+-------------------------+
mysql> select weekday('2018-07-02');
+-----------------------+
| weekday('2018-07-02') |
+-----------------------+
| 0 |
+-----------------------+
11:DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内
mysql> select DAYOFMONTH('2018-01-30');
+--------------------------+
| DAYOFMONTH('2018-01-30') |
+--------------------------+
| 30 |
+--------------------------+
12:DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内
mysql> select DAYOFYEAR('2018-07-01');
+-------------------------+
| DAYOFYEAR('2018-07-01') |
+-------------------------+
| 182 |
+-------------------------+
13:TO_DAYS(date),FROM_DAYS(N)
TO_DAYS给出一个日期 date,返回西元0年至日期date是总共多少天;
FROM_DAYS给出一个天数 N,返回一个 DATE 值
mysql> select to_days('2018-07-01');
+-----------------------+
| to_days('2018-07-01') |
+-----------------------+
| 737241 |
+-----------------------+
mysql> select from_days(737241);
+-------------------+
| from_days(737241) |
+-------------------+
| 2018-07-01 |
+-------------------+
14:UNIX_TIMESTAMP()
当前时间戳
mysql> select UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
| 1530588395 |
+------------------+
15:FROM_UNIXTIME(unix_timestamp,format)
把时间戳转化成日期时间
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP()),FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d %H:%i');
+---------------------------------+--------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP()) | FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d %H:%i') |
+---------------------------------+--------------------------------------------------+
| 2018-07-03 11:28:09 | 2018-07-03 11:28 |
+---------------------------------+--------------------------------------------------+
16:GET_FORMAT({DATE|TIME|DATETIME}, {‘EUR’|’USA’|’JIS’|’ISO’|’INTERNAL’})
返回一个格式化的日期字符串
mysql> select GET_FORMAT(DATE,'USA');
+------------------------+
| GET_FORMAT(DATE,'USA') |
+------------------------+
| %m.%d.%Y |
+------------------------+
17:YEAR(date)
返回date的年份
mysql> SELECT YEAR('70-01-16'),YEAR('2018-01-01');
+------------------+--------------------+
| YEAR('70-01-16') | YEAR('2018-01-01') |
+------------------+--------------------+
| 1970 | 2018 |
+------------------+--------------------+
18:HOUR(time),MINUTE(time),SECOND(time)
返回时、分、秒
mysql> select hour('15:31:13'),minute('15:32:22'),second('15:33:59');
+------------------+--------------------+--------------------+
| hour('15:31:13') | minute('15:32:22') | second('15:33:59') |
+------------------+--------------------+--------------------+
| 15 | 32 | 59 |
+------------------+--------------------+--------------------+
19:LAST_DAY(date)
获取日期或日期时间值,并返回该月最后一天的相应值。如果参数无效,返回NULL。
mysql> select last_day(now());
+-----------------+
| last_day(now()) |
+-----------------+
| 2018-07-31 |
+-----------------+
mysql> select last_day('2018-01-01');
+------------------------+
| last_day('2018-01-01') |
+------------------------+
| 2018-01-31 |
+------------------------+
20:MAKEDATE(year,dayofyear)
返回一个日期,给定年和一天的年值。dayofyear必须大于0,否则结果为空。
mysql> select makedate('2018',360);
+----------------------+
| makedate('2018',360) |
+----------------------+
| 2018-12-26 |
+----------------------+
21:MAKETIME(hour,minute,second)
返回从hour:minute:second
mysql> select maketime(12,30,40);
+--------------------+
| maketime(12,30,40) |
+--------------------+
| 12:30:40 |
+--------------------+
22:MICROSECOND(expr)
返回时间或日期时间表达式expr中的微秒,其值在0到99999999之间。
mysql> select MICROSECOND('12:32:35.4325');
+------------------------------+
| MICROSECOND('12:32:35.4325') |
+------------------------------+
| 432500 |
+------------------------------+
23:PERIOD_ADD(month,add)
返回对month做增减的操作结果,month的格式为yyMM或者yyyyMM,返回的都是yyyyMM格式的结果,add可以传负值
mysql> select PERIOD_ADD(201807,1),PERIOD_ADD(201807,-2);
+----------------------+-----------------------+
| PERIOD_ADD(201807,1) | PERIOD_ADD(201807,-2) |
+----------------------+-----------------------+
| 201808 | 201805 |
+----------------------+-----------------------+
24:PERIOD_DIFF(monthStart,monthEnd)
返回monthStart - monthEnd的间隔月数
mysql> SELECT PERIOD_DIFF(201807,201808),PERIOD_DIFF(201807,201806);
+----------------------------+----------------------------+
| PERIOD_DIFF(201807,201808) | PERIOD_DIFF(201807,201806) |
+----------------------------+----------------------------+
| -1 | 1 |
+----------------------------+----------------------------+
25:ADDDATE(date,INTERVAL expr unit)
同 DATE_ADD()
26:SUBDATE(date,INTERVAL expr unit)
同 DATE_SUB()
27:SEC_TO_TIME(seconds)
把秒数转换成时间
mysql> select SEC_TO_TIME(360);
+------------------+
| SEC_TO_TIME(360) |
+------------------+
| 00:06:00 |
+------------------+
28:TIME_TO_SEC(time)
把时间转化成秒数
mysql> select TIME_TO_SEC('12:10:00');
+-------------------------+
| TIME_TO_SEC('12:10:00') |
+-------------------------+
| 43800 |
+-------------------------+
29:STR_TO_DATE(date,format )
把字符串转成format格式的日期时间
mysql> SELECT STR_TO_DATE('2018-08-08','%Y-%m-%d');
+--------------------------------------+
| STR_TO_DATE('2018-08-08','%Y-%m-%d') |
+--------------------------------------+
| 2018-08-08 |
+--------------------------------------+
30:ADDTIME(expr1,expr2)
把expr2加到expr1上
mysql> SELECT ADDTIME('2017-12-31 23:59:59','00:00:01');
+-------------------------------------------+
| ADDTIME('2017-12-31 23:59:59','00:00:01') |
+-------------------------------------------+
| 2018-01-01 00:00:00 |
+-------------------------------------------+
31:TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
对于单个参数,该函数返回日期或日期时间表达式expr作为一个datetime值。对于两个参数,它将时间表达式expr2添加到日期或datetime表达式expr1,并将结果作为一个datetime值返回。
mysql> SELECT TIMESTAMP('2018-01-01'),TIMESTAMP('2018-01-01','10:12:32');
+-------------------------+------------------------------------+
| TIMESTAMP('2018-01-01') | TIMESTAMP('2018-01-01','10:12:32') |
+-------------------------+------------------------------------+
| 2018-01-01 00:00:00 | 2018-01-01 10:12:32 |
+-------------------------+------------------------------------+
32:TIMESTAMPADD(unit,interval,datetime_expr)
将整数表达式间隔添加到日期或日期时间表达式datetime_expr。interval的单位由unit参数给出,它应该是以下值之一:微秒(微秒)、秒、分钟、小时、天、星期、月、季度或年。
mysql> SELECT TIMESTAMPADD(year,3,'2018-01-01'),TIMESTAMPADD(day,32,'2018-01-01');
+-----------------------------------+-----------------------------------+
| TIMESTAMPADD(year,3,'2018-01-01') | TIMESTAMPADD(day,32,'2018-01-01') |
+-----------------------------------+-----------------------------------+
| 2021-01-01 | 2018-02-02 |
+-----------------------------------+-----------------------------------+
33:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
返回datetime_expr2−datetime_expr1,datetime_expr1和datetime_expr2日期或日期时间表达式。一个表达式可以是日期,另一个表达式可以是日期时间;一个日期值被视为一个datetime,在需要的时候有时间部分“00:00”。结果的单位(一个整数)由单位参数给出。
mysql> SELECT TIMESTAMPDIFF(month,'2018-01-01 10:00:00','2018-07-01');
+---------------------------------------------------------+
| TIMESTAMPDIFF(month,'2018-01-01 10:00:00','2018-07-01') |
+---------------------------------------------------------+
| 5 |
+---------------------------------------------------------+
34:TIME_FORMAT(time,format)
返回指定的时间格式
mysql> SELECT TIME_FORMAT('12:32:10','%H-%i-%s');
+------------------------------------+
| TIME_FORMAT('12:32:10','%H-%i-%s') |
+------------------------------------+
| 12-32-10 |
+------------------------------------+