MySQL内置函数(日期函数)

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’})

返回一个格式化的日期字符串
get_format

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                           |
+------------------------------------+

猜你喜欢

转载自blog.csdn.net/lee_woxinyiran/article/details/80888374
今日推荐