MySQL常用日期時間函數(shù)小結(jié)

備注:測試數(shù)據(jù)庫版本為MySQL 8.0

這個blog我們來聊聊常見的日期時間函數(shù)

mysql的日期時間函數(shù)比oracle更豐富,內(nèi)容也更多,從oracle轉(zhuǎn)過來的多少有些不熟悉,需要慢慢的練習(xí)

函數(shù)名 函數(shù)用途
ADDDATE() 增加日期間隔,默認(rèn)為天,功能和語法與DATE_ADD()/DATE_SUB()/SUBDATE()類似
ADDTIME() 增加時間間隔
CURDATE() 返回當(dāng)前日期,同義詞CURRENT_DATE(), CURRENT_DATE
CURTIME() 返回當(dāng)前時間,同義詞CURRENT_TIME(), CURRENT_TIME
NOW() 返回當(dāng)前日期和時間,同義詞CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP LOCALTIME(), LOCALTIME LOCALTIMESTAMP, LOCALTIMESTAMP()
DATE() 從日期時間類型中截取日期
DATE_FORMAT() 格式日期指定
DATEDIFF() 返回兩個日期間隔的天數(shù)
DAYNAME() 返回日期的星期英文,例如:'Saturday'
DAYOFMONTH() 返回指定日期當(dāng)月的天數(shù), 同義詞DAY()
DAYOFWEEK() 返回星期幾,數(shù)值類型,1-7
DAYOFYEAR() 返回今天是當(dāng)年的第幾天
EXTRACT() 提取日期的部分
FROM_DAYS() 與to_days()結(jié)合使用,數(shù)值轉(zhuǎn)換成日期
FROM_UNIXTIME() 與UNIX_TIMESTAMP()結(jié)合使用,數(shù)值轉(zhuǎn)換成日期時間類型
GET_FORMAT() 返回日期格式的字符串
HOUR() 提取小時
LAST_DAY 返回當(dāng)月最后一天
MAKEDATE() 根據(jù)年份及當(dāng)年的天數(shù),返回日期
MAKETIME() 根據(jù)時分秒,返回時間
MICROSECOND() 從表達式中返回微妙
MINUTE() 從時間中返回分鐘
MONTH() 從日期中返回月份-數(shù)值
MONTHNAME() 從時間類型中返回月份-英文
PERIOD_ADD() 給年月類型增加月份
PERIOD_DIFF() 返回兩個年月間隔的月份
QUARTER() 返回年份中的季度 取值1-4
SEC_TO_TIME() 將數(shù)值類型的秒轉(zhuǎn)換為時分秒
SECOND() 返回時間中的秒
STR_TO_DATE() 將字符串轉(zhuǎn)為日期時間格式
SUBTIME() SUBTIME(expr1,expr2) 返回expr1和expr2的差
SYSDATE() 返回當(dāng)前時間
TIME() 返回日期時間格式中的時間
TIME_FORMAT() 指定時間格式
TIME_TO_SEC() 將時間類型轉(zhuǎn)換為秒,與SEC_TO_TIME相反
TIMEDIFF() 返回兩個時間的差,結(jié)果為時間類型
TIMESTAMP() 返回日期時間類型值
TIMESTAMPADD() 日期時間類型增加間隔
TIMESTAMPDIFF() 求兩個日期時間的間隔
TO_DAYS() 返回日期對應(yīng)的天數(shù),0000-00-01為第一天
TO_SECONDS() 返回日期對應(yīng)的秒,0000-00-00 00:00:01為第一秒
UNIX_TIMESTAMP() 將時間轉(zhuǎn)成數(shù)字,與FROM_UNIXTIME相互對應(yīng)
WEEK() 返回本年的星期數(shù)
WEEKDAY() 返回數(shù)值的星期數(shù)
WEEKOFYEAR() 返回本年的星期數(shù)
YEAR() 返回年份
YEARWEEK() 返回星期數(shù)

1.ADDDATE

語法:ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)
用于給時間類型增加時間間隔,默認(rèn)為天

--通過interval增加
mysql> SELECT ADDDATE('2020-01-01', INTERVAL 31 DAY);
+----------------------------------------+
| ADDDATE('2020-01-01', INTERVAL 31 DAY) |
+----------------------------------------+
| 2020-02-01                             |
+----------------------------------------+
1 row in set (0.00 sec)
--直接通過數(shù)字進行增加
mysql> SELECT ADDDATE('2020-01-01',31);
+--------------------------+
| ADDDATE('2020-01-01',31) |
+--------------------------+
| 2020-02-01               |
+--------------------------+
1 row in set (0.00 sec)
--有時分秒的也可以進行增加
mysql> SELECT ADDDATE('2020-01-01 09:00:00',31);
+-----------------------------------+
| ADDDATE('2020-01-01 09:00:00',31) |
+-----------------------------------+
| 2020-02-01 09:00:00               |
+-----------------------------------+
1 row in set (0.00 sec)
--增加1年
mysql> SELECT ADDDATE('2020-01-01 09:00:00',INTERVAL 1 YEAR);
+------------------------------------------------+
| ADDDATE('2020-01-01 09:00:00',INTERVAL 1 YEAR) |
+------------------------------------------------+
| 2021-01-01 09:00:00                            |
+------------------------------------------------+
1 row in set (0.00 sec)
--增加1月
mysql> SELECT ADDDATE('2020-01-01 09:00:00',INTERVAL 1 MONTH);
+-------------------------------------------------+
| ADDDATE('2020-01-01 09:00:00',INTERVAL 1 MONTH) |
+-------------------------------------------------+
| 2020-02-01 09:00:00                             |
+-------------------------------------------------+
1 row in set (0.00 sec)
--增加1天
mysql> SELECT ADDDATE('2020-01-01 09:00:00',INTERVAL 1 DAY);
+-----------------------------------------------+
| ADDDATE('2020-01-01 09:00:00',INTERVAL 1 DAY) |
+-----------------------------------------------+
| 2020-01-02 09:00:00                           |
+-----------------------------------------------+
1 row in set (0.00 sec)
--增加1小時
mysql> SELECT ADDDATE('2020-01-01 09:00:00',INTERVAL 1 DAY_HOUR);
+----------------------------------------------------+
| ADDDATE('2020-01-01 09:00:00',INTERVAL 1 DAY_HOUR) |
+----------------------------------------------------+
| 2020-01-01 10:00:00                                |
+----------------------------------------------------+
1 row in set (0.00 sec)
--增加1分鐘
mysql> SELECT ADDDATE('2020-01-01 09:00:00',INTERVAL 1 MINUTE);
+--------------------------------------------------+
| ADDDATE('2020-01-01 09:00:00',INTERVAL 1 MINUTE) |
+--------------------------------------------------+
| 2020-01-01 09:01:00                              |
+--------------------------------------------------+
1 row in set (0.00 sec)
--增加1秒
mysql> SELECT ADDDATE('2020-01-01 09:00:00',INTERVAL 1 DAY_SECOND);
+------------------------------------------------------+
| ADDDATE('2020-01-01 09:00:00',INTERVAL 1 DAY_SECOND) |
+------------------------------------------------------+
| 2020-01-01 09:00:01                                  |
+------------------------------------------------------+
1 row in set (0.00 sec)
--增加1分1秒
mysql> SELECT ADDDATE('2020-01-01 09:00:00',INTERVAL '1:1' MINUTE_SECOND);
+-------------------------------------------------------------+
| ADDDATE('2020-01-01 09:00:00',INTERVAL '1:1' MINUTE_SECOND) |
+-------------------------------------------------------------+
| 2020-01-01 09:01:01                                         |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

2.ADDTIME

語法:ADDTIME(expr1,expr2)
給日期列增加一個時間,可以是天/時/分/秒/微妙

--增加1小時、30分、10秒
mysql> SELECT ADDTIME('2020-01-01 09:00:00','01:30:10');
+-------------------------------------------+
| ADDTIME('2020-01-01 09:00:00','01:30:10') |
+-------------------------------------------+
| 2020-01-01 10:30:10                       |
+-------------------------------------------+
1 row in set (0.00 sec)
--增加1天、1小時、30分、10秒
mysql> SELECT ADDTIME('2020-01-01 09:00:00','1 01:30:10');
+---------------------------------------------+
| ADDTIME('2020-01-01 09:00:00','1 01:30:10') |
+---------------------------------------------+
| 2020-01-02 10:30:10                         |
+---------------------------------------------+
1 row in set (0.00 sec)
--如果剛好是月底,增加1天后,會自動跳到下個月
mysql> SELECT ADDTIME('2020-01-31 09:00:00','1 01:30:10');
+---------------------------------------------+
| ADDTIME('2020-01-31 09:00:00','1 01:30:10') |
+---------------------------------------------+
| 2020-02-01 10:30:10                         |
+---------------------------------------------+
1 row in set (0.00 sec)
--給時間加上50天
mysql> SELECT ADDTIME('2020-01-31 09:00:00','50 01:30:10');
+----------------------------------------------+
| ADDTIME('2020-01-31 09:00:00','50 01:30:10') |
+----------------------------------------------+
| 2020-03-06 07:59:59                          |
+----------------------------------------------+
1 row in set, 1 warning (0.00 sec)
--給時間加上1秒2微妙
mysql> SELECT ADDTIME('2020-01-31 09:00:00.999999','0:0:1.000002');
+------------------------------------------------------+
| ADDTIME('2020-01-31 09:00:00.999999','0:0:1.000002') |
+------------------------------------------------------+
| 2020-01-31 09:00:02.000001                           |
+------------------------------------------------------+
1 row in set (0.00 sec)

3.CURDATE()

返回一個'YYYY-MM-DD' 或者 YYYYMMDD 格式的日期

mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2020-05-22 |
+------------+
1 row in set (0.00 sec)

mysql> select curdate()+0;
+-------------+
| curdate()+0 |
+-------------+
|    20200522 |
+-------------+
1 row in set (0.00 sec)

4.CURTIME()

返回'hh:mm:ss' 或 hhmmss 格式時間

mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 15:29:27  |
+-----------+
1 row in set (0.00 sec)

mysql> select curtime()+0;
+-------------+
| curtime()+0 |
+-------------+
|      152930 |
+-------------+
1 row in set (0.00 sec)

5.NOW()

返回當(dāng)前日期和時間,返回格式 'YYYY-MM-DD hh:mm:ss' 或 YYYYMMDDhhmmss

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2020-05-22 15:33:27 |
+---------------------+
1 row in set (0.00 sec)

mysql> select now()+0
    -> ;
+----------------+
| now()+0        |
+----------------+
| 20200522153333 |
+----------------+
1 row in set (0.00 sec)

--now()是返回查詢開始的時間,即便有sleep也沒用
mysql> SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(2) | NOW()               |
+---------------------+----------+---------------------+
| 2020-05-22 15:34:00 |        0 | 2020-05-22 15:34:00 |
+---------------------+----------+---------------------+
1 row in set (2.00 sec)
--sysdate返回的是查詢當(dāng)時的時間
mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(2) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2020-05-22 15:34:12 |        0 | 2020-05-22 15:34:14 |
+---------------------+----------+---------------------+
1 row in set (2.00 sec)

6.DATE()

從日期時間類型中截取日期類型

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2020-05-22 15:39:03 |
+---------------------+
1 row in set (0.00 sec)

mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2020-05-22  |
+-------------+
1 row in set (0.00 sec)

mysql> select date('2020-05-22 23:59:59');
+-----------------------------+
| date('2020-05-22 23:59:59') |
+-----------------------------+
| 2020-05-22                  |
+-----------------------------+
1 row in set (0.00 sec)

7.DATE_FORMAT()

格式日期指定,真的很豐富

格式 描述
%a 縮寫星期名
%b 縮寫月名
%c 月,數(shù)值
%D 帶有英文前綴的月中的天
%d 月的天,數(shù)值(00-31)
%e 月的天,數(shù)值(0-31)
%f 微秒
%H 小時 (00-23)
%h 小時 (01-12)
%I 小時 (01-12)
%i 分鐘,數(shù)值(00-59)
%j 年的天 (001-366)
%k 小時 (0-23)
%l 小時 (1-12)
%M 月名
%m 月,數(shù)值(00-12)
%p AM 或 PM
%r 時間,12-小時(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 時間, 24-小時 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,與 %X 使用
%v 周 (01-53) 星期一是一周的第一天,與 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,與 %V 使用
%x 年,其中的星期一是周的第一天,4 位,與 %v 使用
%Y 年,4 位
%y 年,2 位
%% % 字符
%x 上述之外的,用x表示

內(nèi)容太多,我挑幾個常用的來練習(xí)一下:

mysql> -- 顯示年月日時分秒 24小時制
mysql> SELECT DATE_FORMAT('2020-05-22 13:00:00', '%Y-%m-%d %H:%i:%s');
+---------------------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00', '%Y-%m-%d %H:%i:%s') |
+---------------------------------------------------------+
| 2020-05-22 13:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 顯示年月日時分秒 12小時制
mysql> SELECT DATE_FORMAT('2020-05-22 13:00:00', '%Y-%m-%d %h:%i:%s %p');
+------------------------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00', '%Y-%m-%d %h:%i:%s %p') |
+------------------------------------------------------------+
| 2020-05-22 01:00:00 PM                                     |
+------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 顯示英文月名
mysql> SELECT DATE_FORMAT('2020-05-22 13:00:00', '%M');
+------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00', '%M') |
+------------------------------------------+
| May                                      |
+------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 顯示英文月名簡稱
mysql> SELECT DATE_FORMAT('2020-05-22 13:00:00', '%b');
+------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00', '%b') |
+------------------------------------------+
| May                                      |
+------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 顯示星期英文名
mysql> SELECT DATE_FORMAT('2020-05-22 13:00:00', '%W');
+------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00', '%W') |
+------------------------------------------+
| Friday                                   |
+------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 用數(shù)值顯示今天周幾,0代表周日
mysql> SELECT DATE_FORMAT('2020-05-22 13:00:00', '%w');
+------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00', '%w') |
+------------------------------------------+
| 5                                        |
+------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 用數(shù)值顯示今天是本年的第幾周,星期一是周的第一天
mysql> SELECT DATE_FORMAT('2020-05-22 13:00:00', '%x-%v');
+---------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00', '%x-%v') |
+---------------------------------------------+
| 2020-21                                     |
+---------------------------------------------+
1 row in set (0.00 sec)

8.DATEDIFF()

返回兩個時間間隔的天數(shù)
語法:DATEDIFF(expr1,expr2)

--計算2個時間間隔的天數(shù)
mysql> select datediff('2020-05-22','2020-05-01');
+-------------------------------------+
| datediff('2020-05-22','2020-05-01') |
+-------------------------------------+
|                                  21 |
+-------------------------------------+
1 row in set (0.00 sec)
--有時分秒的話,都截取了,只比較日期部分
mysql>
mysql> select datediff('2020-05-22','2020-05-01 23:59:59');
+----------------------------------------------+
| datediff('2020-05-22','2020-05-01 23:59:59') |
+----------------------------------------------+
|                                           21 |
+----------------------------------------------+
1 row in set (0.00 sec)

9.dayname()

返回指定日期的星期英文

mysql> select dayname(now());
+----------------+
| dayname(now()) |
+----------------+
| Friday         |
+----------------+
1 row in set (0.00 sec)

10.DAYOFMONTH()

返回指定日期當(dāng)月的天數(shù),數(shù)字類型,返回值1-31

mysql> select DAYOFMONTH('2020-05-22');
+--------------------------+
| DAYOFMONTH('2020-05-22') |
+--------------------------+
|                       22 |
+--------------------------+
1 row in set (0.00 sec)

mysql> select DAYOFMONTH('2020-05-02');
+--------------------------+
| DAYOFMONTH('2020-05-02') |
+--------------------------+
|                        2 |
+--------------------------+
1 row in set (0.00 sec)

11.DAYOFWEEK()

返回星期幾,數(shù)值類型,1-7
date (1 = Sunday, 2 = Monday, …, 7 = Saturday).

mysql> select DAYOFWEEK('2020-05-22');
+-------------------------+
| DAYOFWEEK('2020-05-22') |
+-------------------------+
|                       6 |
+-------------------------+
1 row in set (0.00 sec)

12.DAYOFYEAR()

返回今天是當(dāng)年的第幾天 (1-366)

mysql> select DAYOFYEAR('2020-05-22');
+-------------------------+
| DAYOFYEAR('2020-05-22') |
+-------------------------+
|                     143 |
+-------------------------+
1 row in set (0.00 sec)

13.EXTRACT()

提取日期的部分
語法:EXTRACT(unit FROM date)

mysql> -- 提取年
mysql> SELECT EXTRACT(YEAR FROM '2020-05-22');
+---------------------------------+
| EXTRACT(YEAR FROM '2020-05-22') |
+---------------------------------+
|                            2020 |
+---------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 提取月
mysql> SELECT EXTRACT(MONTH FROM '2020-05-22');
+----------------------------------+
| EXTRACT(MONTH FROM '2020-05-22') |
+----------------------------------+
|                                5 |
+----------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 提取日
mysql> SELECT EXTRACT(DAY FROM '2020-05-22');
+--------------------------------+
| EXTRACT(DAY FROM '2020-05-22') |
+--------------------------------+
|                             22 |
+--------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 提取小時
mysql> SELECT EXTRACT(HOUR FROM '2020-05-22 13:02:01');
+------------------------------------------+
| EXTRACT(HOUR FROM '2020-05-22 13:02:01') |
+------------------------------------------+
|                                       13 |
+------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 提取分鐘
mysql> SELECT EXTRACT(MINUTE FROM '2020-05-22 13:02:01');
+--------------------------------------------+
| EXTRACT(MINUTE FROM '2020-05-22 13:02:01') |
+--------------------------------------------+
|                                          2 |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 提取秒
mysql> SELECT EXTRACT(SECOND FROM '2020-05-22 13:02:01');
+--------------------------------------------+
| EXTRACT(SECOND FROM '2020-05-22 13:02:01') |
+--------------------------------------------+
|                                          1 |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 提取毫秒
mysql> SELECT EXTRACT(MICROSECOND FROM '2020-05-22 13:00:00.000123');
+--------------------------------------------------------+
| EXTRACT(MICROSECOND FROM '2020-05-22 13:00:00.000123') |
+--------------------------------------------------------+
|                                                    123 |
+--------------------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 也可以組合
mysql> SELECT EXTRACT(YEAR_MONTH FROM '2020-05-22');
+---------------------------------------+
| EXTRACT(YEAR_MONTH FROM '2020-05-22') |
+---------------------------------------+
|                                202005 |
+---------------------------------------+
1 row in set (0.00 sec)

14.FROM_DAYS()

與to_days()結(jié)合使用,數(shù)值轉(zhuǎn)換成日期

mysql> select to_days('2020-05-22');
+-----------------------+
| to_days('2020-05-22') |
+-----------------------+
|                737932 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select from_days(737932);
+-------------------+
| from_days(737932) |
+-------------------+
| 2020-05-22        |
+-------------------+
1 row in set (0.00 sec)

15.FROM_UNIXTIME()

與UNIX_TIMESTAMP()結(jié)合使用,數(shù)值轉(zhuǎn)換成日期時間類型

mysql> select UNIX_TIMESTAMP('2020-05-22 13:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2020-05-22 13:00:00') |
+---------------------------------------+
|                            1590123600 |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> select UNIX_TIMESTAMP('2020-05-22');
+------------------------------+
| UNIX_TIMESTAMP('2020-05-22') |
+------------------------------+
|                   1590076800 |
+------------------------------+
1 row in set (0.00 sec)

mysql> select   FROM_UNIXTIME(1590123600);
+---------------------------+
| FROM_UNIXTIME(1590123600) |
+---------------------------+
| 2020-05-22 13:00:00       |
+---------------------------+
1 row in set (0.00 sec)

16.GET_FORMAT()

返回日期格式的字符串

語句 格式
GET_FORMAT(DATE,'USA') '%m.%d.%Y'
GET_FORMAT(DATE,'JIS') '%Y-%m-%d'
GET_FORMAT(DATE,'ISO') '%Y-%m-%d'
GET_FORMAT(DATE,'EUR') '%d.%m.%Y'
GET_FORMAT(DATE,'INTERNAL') '%Y%m%d'
GET_FORMAT(DATETIME,'USA') '%Y-%m-%d %H.%i.%s'
GET_FORMAT(DATETIME,'JIS') '%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'ISO') '%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'EUR') '%Y-%m-%d %H.%i.%s'
GET_FORMAT(DATETIME,'INTERNAL') '%Y%m%d%H%i%s'
GET_FORMAT(TIME,'USA') '%h:%i:%s %p'
GET_FORMAT(TIME,'JIS') '%H:%i:%s'
GET_FORMAT(TIME,'ISO') '%H:%i:%s'
GET_FORMAT(TIME,'EUR') '%H.%i.%s'
GET_FORMAT(TIME,'INTERNAL') '%H%i%s'

需要與DATE_FORMAT函數(shù)結(jié)合使用,標(biāo)準(zhǔn)輸出的話,看起來還蠻方便的

mysql> select DATE_FORMAT('2020-05-22 13:00:00',GET_FORMAT(DATE,'ISO'));
+-----------------------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00',GET_FORMAT(DATE,'ISO')) |
+-----------------------------------------------------------+
| 2020-05-22                                                |
+-----------------------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> select DATE_FORMAT('2020-05-22 13:00:00',GET_FORMAT(DATETIME,'ISO'));
+---------------------------------------------------------------+
| DATE_FORMAT('2020-05-22 13:00:00',GET_FORMAT(DATETIME,'ISO')) |
+---------------------------------------------------------------+
| 2020-05-22 13:00:00                                           |
+---------------------------------------------------------------+
1 row in set (0.00 sec)

17.HOUR()

提取小時,可以超過23

mysql> SELECT HOUR('10:05:03');
+------------------+
| HOUR('10:05:03') |
+------------------+
|               10 |
+------------------+
1 row in set (0.00 sec)

mysql> SELECT HOUR('272:59:59');
+-------------------+
| HOUR('272:59:59') |
+-------------------+
|               272 |
+-------------------+
1 row in set (0.00 sec)

18.LAST_DAY()

返回當(dāng)月的最后一天,如果日期錯誤,返回null

mysql> SELECT LAST_DAY('2020-05-22');
+------------------------+
| LAST_DAY('2020-05-22') |
+------------------------+
| 2020-05-31             |
+------------------------+
1 row in set (0.00 sec)

mysql> SELECT LAST_DAY('2020-05-32');
+------------------------+
| LAST_DAY('2020-05-32') |
+------------------------+
| NULL                   |
+------------------------+
1 row in set, 1 warning (0.00 sec)

19.MAKEDATE

根據(jù)年份和當(dāng)年的第幾天,返回日期
語法:MAKEDATE(year,dayofyear)

mysql> select makedate(2020,100);
+--------------------+
| makedate(2020,100) |
+--------------------+
| 2020-04-09         |
+--------------------+
1 row in set (0.00 sec)

mysql> select makedate(2020,0);
+------------------+
| makedate(2020,0) |
+------------------+
| NULL             |
+------------------+
1 row in set (0.00 sec)

mysql> select makedate(2020,null);
+---------------------+
| makedate(2020,null) |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

20.MAKETIME

根據(jù)時分秒構(gòu)造時間
語法:MAKETIME(hour,minute,second)

mysql> SELECT MAKETIME(12,15,30);
+--------------------+
| MAKETIME(12,15,30) |
+--------------------+
| 12:15:30           |
+--------------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> SELECT MAKETIME(12,15,0);
+-------------------+
| MAKETIME(12,15,0) |
+-------------------+
| 12:15:00          |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT MAKETIME(12,15,null);
+----------------------+
| MAKETIME(12,15,null) |
+----------------------+
| NULL                 |
+----------------------+
1 row in set (0.00 sec)

21.MICROSECOND()

從表達式中返回微妙

mysql> SELECT MICROSECOND('12:00:00.123456');
+--------------------------------+
| MICROSECOND('12:00:00.123456') |
+--------------------------------+
|                         123456 |
+--------------------------------+
1 row in set (0.02 sec)

mysql> SELECT MICROSECOND('2019-12-31 23:59:59.000010');
+-------------------------------------------+
| MICROSECOND('2019-12-31 23:59:59.000010') |
+-------------------------------------------+
|                                        10 |
+-------------------------------------------+
1 row in set (0.00 sec)

22.MINUTE()

從時間類型中返回分

mysql> SELECT MINUTE('2020-05-22 20:05:03');
+-------------------------------+
| MINUTE('2020-05-22 20:05:03') |
+-------------------------------+
|                             5 |
+-------------------------------+
1 row in set (0.01 sec)

23.MONTH()

從時間類型中返回月份-數(shù)值類型

mysql> SELECT MONTH('2020-05-22 20:05:03');
+------------------------------+
| MONTH('2020-05-22 20:05:03') |
+------------------------------+
|                            5 |
+------------------------------+
1 row in set (0.00 sec)

24.MONTHNAME()

從時間類型中返回月份-英文

mysql> SELECT MONTHNAME('2020-05-22 20:05:03');
+----------------------------------+
| MONTHNAME('2020-05-22 20:05:03') |
+----------------------------------+
| May                              |
+----------------------------------+
1 row in set (0.05 sec)

25.PERIOD_ADD()

語法:PERIOD_ADD(P,N)
給P增加N個月份,P的格式Y(jié)YMM or YYYYMM,返回格式

mysql> select PERIOD_ADD(2005,3);
+--------------------+
| PERIOD_ADD(2005,3) |
+--------------------+
|             202008 |
+--------------------+
1 row in set (0.02 sec)

mysql> select PERIOD_ADD(202005,3);
+----------------------+
| PERIOD_ADD(202005,3) |
+----------------------+
|               202008 |
+----------------------+
1 row in set (0.00 sec)

mysql> select PERIOD_ADD(202005,15);
+-----------------------+
| PERIOD_ADD(202005,15) |
+-----------------------+
|                202108 |
+-----------------------+
1 row in set (0.00 sec)

26.PERIOD_DIFF()

返回兩個年月間隔的月份
語法:PERIOD_DIFF(P1,P2)

mysql> select PERIOD_DIFF(202108,202005);
+----------------------------+
| PERIOD_DIFF(202108,202005) |
+----------------------------+
|                         15 |
+----------------------------+
1 row in set (0.02 sec)

mysql> select PERIOD_DIFF(202108,202405);
+----------------------------+
| PERIOD_DIFF(202108,202405) |
+----------------------------+
|                        -33 |
+----------------------------+
1 row in set (0.00 sec)

27.QUARTER()

返回年份中的季度 取值1-4
語法:QUARTER(date)

mysql> select QUARTER('2020-05-22');
+-----------------------+
| QUARTER('2020-05-22') |
+-----------------------+
|                     2 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select QUARTER('2020-01-22');
+-----------------------+
| QUARTER('2020-01-22') |
+-----------------------+
|                     1 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select QUARTER('2020-08-22');
+-----------------------+
| QUARTER('2020-08-22') |
+-----------------------+
|                     3 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select QUARTER('2020-12-22');
+-----------------------+
| QUARTER('2020-12-22') |
+-----------------------+
|                     4 |
+-----------------------+
1 row in set (0.00 sec)

28.SEC_TO_TIME()

將數(shù)值類型的秒轉(zhuǎn)換為時分秒

mysql> select SEC_TO_TIME(61);
+-----------------+
| SEC_TO_TIME(61) |
+-----------------+
| 00:01:01        |
+-----------------+
1 row in set (0.04 sec)

mysql> select SEC_TO_TIME(3661);
+-------------------+
| SEC_TO_TIME(3661) |
+-------------------+
| 01:01:01          |
+-------------------+
1 row in set (0.00 sec)

mysql> select SEC_TO_TIME(36610);
+--------------------+
| SEC_TO_TIME(36610) |
+--------------------+
| 10:10:10           |
+--------------------+
1 row in set (0.00 sec)

29.SECOND()

返回時間中的秒

mysql> select SECOND('2020-05-22 23:50:59');
+-------------------------------+
| SECOND('2020-05-22 23:50:59') |
+-------------------------------+
|                            59 |
+-------------------------------+
1 row in set (0.00 sec)

30.STR_TO_DATE()

語法:STR_TO_DATE(str,format)
將字符串轉(zhuǎn)為日期時間格式

-- 這樣隨意的格式就是字符串,可以轉(zhuǎn)為日期時間類型
mysql> select STR_TO_DATE('20200522 23:50:59','%Y%m%d %H:%i:%s');
+----------------------------------------------------+
| STR_TO_DATE('20200522 23:50:59','%Y%m%d %H:%i:%s') |
+----------------------------------------------------+
| 2020-05-22 23:50:59                                |
+----------------------------------------------------+
1 row in set (0.00 sec)

-- 這樣標(biāo)準(zhǔn)的格式被mysql默認(rèn)為時間類型了,不能再轉(zhuǎn)了
mysql> select STR_TO_DATE('2020-05-22 23:50:59','%Y%m%d %H:%i:%s');
+------------------------------------------------------+
| STR_TO_DATE('2020-05-22 23:50:59','%Y%m%d %H:%i:%s') |
+------------------------------------------------------+
| NULL                                                 |
+------------------------------------------------------+
1 row in set, 2 warnings (0.00 sec)

31.SUBTIME()

語法:SUBTIME(expr1,expr2)
返回expr1和expr2的差,返回依舊是日期時間類型

-- expr2只能是時間類型 不能是日期類型
mysql> select SUBTIME('2020-01-01 00:00:00','2020-05-22 23:50:59');
+------------------------------------------------------+
| SUBTIME('2020-01-01 00:00:00','2020-05-22 23:50:59') |
+------------------------------------------------------+
| NULL                                                 |
+------------------------------------------------------+
1 row in set (0.00 sec)

-- 日期時間減去時間,得到日期時間
mysql>
mysql> select SUBTIME('2020-01-01 00:00:00','23:50:59');
+-------------------------------------------+
| SUBTIME('2020-01-01 00:00:00','23:50:59') |
+-------------------------------------------+
| 2019-12-31 00:09:01                       |
+-------------------------------------------+
1 row in set (0.00 sec)

--時間減去時間,得到的依舊是時間
mysql>
mysql> select SUBTIME('23:50:59','01:01:01');
+--------------------------------+
| SUBTIME('23:50:59','01:01:01') |
+--------------------------------+
| 22:49:58                       |
+--------------------------------+
1 row in set (0.00 sec)

32.SYSDATE()

返回當(dāng)前時間,參考前面的NOW()

33.TIME()

返回日期時間格式中的時間

mysql> select TIME('2020-05-22 23:50:59');
+-----------------------------+
| TIME('2020-05-22 23:50:59') |
+-----------------------------+
| 23:50:59                    |
+-----------------------------+
1 row in set (0.02 sec)

mysql> select TIME('2020-05-22 23:50:59.000123');
+------------------------------------+
| TIME('2020-05-22 23:50:59.000123') |
+------------------------------------+
| 23:50:59.000123                    |
+------------------------------------+
1 row in set (0.00 sec)

34.TIME_FORMAT()

語法:TIME_FORMAT(time,format)
指定時間格式

mysql> select TIME_FORMAT('23:50:59','%H-%i-%s');
+------------------------------------+
| TIME_FORMAT('23:50:59','%H-%i-%s') |
+------------------------------------+
| 23-50-59                           |
+------------------------------------+
1 row in set (0.00 sec)

35.TIME_TO_SEC()

將時間類型轉(zhuǎn)換為秒,與SEC_TO_TIME相反

mysql> select TIME_TO_SEC('23:50:59');
+-------------------------+
| TIME_TO_SEC('23:50:59') |
+-------------------------+
|                   85859 |
+-------------------------+
1 row in set (0.00 sec)

mysql> select SEC_TO_TIME(85859);
+--------------------+
| SEC_TO_TIME(85859) |
+--------------------+
| 23:50:59           |
+--------------------+
1 row in set (0.00 sec)

36.TIMEDIFF()

語法:TIMEDIFF(expr1,expr2)
返回expr1和expr2的差,返回值認(rèn)為時間類型

mysql> select timediff('2020-05-22 23:50:59.000001','2020-05-22 23:50:59.000003');
+---------------------------------------------------------------------+
| timediff('2020-05-22 23:50:59.000001','2020-05-22 23:50:59.000003') |
+---------------------------------------------------------------------+
| -00:00:00.000002                                                    |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)

37.TIMESTAMP()

語法:TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
如果有只1個參數(shù),返回日期時間類型
如果有2個參數(shù),expr1+expr2 然后返回日期時間類型

mysql> select timestamp('2020-05-22 23:50:59');
+----------------------------------+
| timestamp('2020-05-22 23:50:59') |
+----------------------------------+
| 2020-05-22 23:50:59              |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select timestamp('2020-05-22');
+-------------------------+
| timestamp('2020-05-22') |
+-------------------------+
| 2020-05-22 00:00:00     |
+-------------------------+
1 row in set (0.00 sec)

mysql> select timestamp('2020-05-22 23:50:59','00:10:01');
+---------------------------------------------+
| timestamp('2020-05-22 23:50:59','00:10:01') |
+---------------------------------------------+
| 2020-05-23 00:01:00                         |
+---------------------------------------------+
1 row in set (0.00 sec)

38.TIMESTAMPADD()

語法:TIMESTAMPADD(unit,interval,datetime_expr)
日期時間類型增加間隔
MICROSECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.

select TIMESTAMPADD(MICROSECOND,1,'2020-05-22 23:50:59');
select TIMESTAMPADD(SECOND,1,'2020-05-22 23:50:59');
select TIMESTAMPADD(MINUTE,1,'2020-05-22 23:50:59');
select TIMESTAMPADD(HOUR,1,'2020-05-22 23:50:59');
select TIMESTAMPADD(DAY,1,'2020-05-22 23:50:59');
select TIMESTAMPADD(WEEK,1,'2020-05-22 23:50:59');
select TIMESTAMPADD(MONTH,1,'2020-05-22 23:50:59');
select TIMESTAMPADD(QUARTER,1,'2020-05-22 23:50:59');
select TIMESTAMPADD(YEAR,1,'2020-05-22 23:50:59');
mysql> select TIMESTAMPADD(MICROSECOND,1,'2020-05-22 23:50:59');
+---------------------------------------------------+
| TIMESTAMPADD(MICROSECOND,1,'2020-05-22 23:50:59') |
+---------------------------------------------------+
| 2020-05-22 23:50:59.000001                        |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql> select TIMESTAMPADD(SECOND,1,'2020-05-22 23:50:59');
+----------------------------------------------+
| TIMESTAMPADD(SECOND,1,'2020-05-22 23:50:59') |
+----------------------------------------------+
| 2020-05-22 23:51:00                          |
+----------------------------------------------+
1 row in set (0.02 sec)

mysql> select TIMESTAMPADD(MINUTE,1,'2020-05-22 23:50:59');
+----------------------------------------------+
| TIMESTAMPADD(MINUTE,1,'2020-05-22 23:50:59') |
+----------------------------------------------+
| 2020-05-22 23:51:59                          |
+----------------------------------------------+
1 row in set (0.00 sec)

mysql> select TIMESTAMPADD(HOUR,1,'2020-05-22 23:50:59');
+--------------------------------------------+
| TIMESTAMPADD(HOUR,1,'2020-05-22 23:50:59') |
+--------------------------------------------+
| 2020-05-23 00:50:59                        |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select TIMESTAMPADD(DAY,1,'2020-05-22 23:50:59');
+-------------------------------------------+
| TIMESTAMPADD(DAY,1,'2020-05-22 23:50:59') |
+-------------------------------------------+
| 2020-05-23 23:50:59                       |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select TIMESTAMPADD(WEEK,1,'2020-05-22 23:50:59');
+--------------------------------------------+
| TIMESTAMPADD(WEEK,1,'2020-05-22 23:50:59') |
+--------------------------------------------+
| 2020-05-29 23:50:59                        |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select TIMESTAMPADD(MONTH,1,'2020-05-22 23:50:59');
+---------------------------------------------+
| TIMESTAMPADD(MONTH,1,'2020-05-22 23:50:59') |
+---------------------------------------------+
| 2020-06-22 23:50:59                         |
+---------------------------------------------+
1 row in set (0.00 sec)

mysql> select TIMESTAMPADD(QUARTER,1,'2020-05-22 23:50:59');
+-----------------------------------------------+
| TIMESTAMPADD(QUARTER,1,'2020-05-22 23:50:59') |
+-----------------------------------------------+
| 2020-08-22 23:50:59                           |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql> select TIMESTAMPADD(YEAR,1,'2020-05-22 23:50:59');
+--------------------------------------------+
| TIMESTAMPADD(YEAR,1,'2020-05-22 23:50:59') |
+--------------------------------------------+
| 2021-05-22 23:50:59                        |
+--------------------------------------------+

39.TIMESTAMPDIFF()

語法:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
求兩個日期時間的間隔
MICROSECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.

-- 求2個時間間隔的月份
mysql> SELECT TIMESTAMPDIFF(MONTH,'2020-02-01','2020-05-01');
+------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2020-02-01','2020-05-01') |
+------------------------------------------------+
|                                              3 |
+------------------------------------------------+
1 row in set (0.00 sec)
-- 默認(rèn)向下取整,沒有帶小數(shù)
mysql> SELECT TIMESTAMPDIFF(MONTH,'2020-02-01','2020-05-02');
+------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2020-02-01','2020-05-02') |
+------------------------------------------------+
|                                              3 |
+------------------------------------------------+
1 row in set (0.00 sec)

40.TO_DAYS()

返回日期對應(yīng)的天數(shù),0000-00-01為第一天

mysql> SELECT TO_DAYS('0000-01-01');
+-----------------------+
| TO_DAYS('0000-01-01') |
+-----------------------+
|                     1 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT TO_DAYS('0001-01-01');
+-----------------------+
| TO_DAYS('0001-01-01') |
+-----------------------+
|                   366 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT TO_DAYS('2020-01-01');
+-----------------------+
| TO_DAYS('2020-01-01') |
+-----------------------+
|                737790 |
+-----------------------+
1 row in set (0.00 sec)

mysql>
mysql> SELECT TO_DAYS('20-01-01');
+---------------------+
| TO_DAYS('20-01-01') |
+---------------------+
|              737790 |
+---------------------+
1 row in set (0.00 sec)

41.TO_SECONDS()

返回日期對應(yīng)的秒,0000-00-00 00:00:01為第一秒

mysql> SELECT TO_SECONDS('0000-01-01 00:00:01');
+-----------------------------------+
| TO_SECONDS('0000-01-01 00:00:01') |
+-----------------------------------+
|                             86401 |
+-----------------------------------+
1 row in set (0.00 sec)

42.UNIX_TIMESTAMP()

將時間轉(zhuǎn)成數(shù)字,與FROM_UNIXTIME相互對應(yīng)

mysql> select UNIX_TIMESTAMP('2020-05-22 23:50:59');
+---------------------------------------+
| UNIX_TIMESTAMP('2020-05-22 23:50:59') |
+---------------------------------------+
|                            1590162659 |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> select FROM_UNIXTIME(1590162659);
+---------------------------+
| FROM_UNIXTIME(1590162659) |
+---------------------------+
| 2020-05-22 23:50:59       |
+---------------------------+
1 row in set (0.02 sec)

43.WEEK()

返回本年的星期數(shù)
[圖片上傳中...(image.png-3aa5e3-1590162278137-0)]

-- 今天是本年的第20周,返回20
mysql> select week('2020-05-22');
+--------------------+
| week('2020-05-22') |
+--------------------+
|                 20 |
+--------------------+
1 row in set (0.02 sec)
-- 0代表星期天為一周的開始
mysql> select week('2020-05-22',0);
+----------------------+
| week('2020-05-22',0) |
+----------------------+
|                   20 |
+----------------------+
1 row in set (0.00 sec)
-- 1代表星期1位一周的開始
mysql> select week('2020-05-22',1);
+----------------------+
| week('2020-05-22',1) |
+----------------------+
|                   21 |
+----------------------+
1 row in set (0.00 sec)

44.WEEKDAY()

返回數(shù)值的星期數(shù)
0 = Monday, 1 = Tuesday, … 6 = Sunday

-- 今天是周五,返回了數(shù)值4
mysql> select weekday('2020-05-22');
+-----------------------+
| weekday('2020-05-22') |
+-----------------------+
|                     4 |
+-----------------------+
1 row in set (0.00 sec)

45.WEEKOFYEAR()

等價于:WEEK(date,3)

46.YEAR()

返回年份

mysql> select YEAR('2020-05-22');
+--------------------+
| YEAR('2020-05-22') |
+--------------------+
|               2020 |
+--------------------+
1 row in set (0.01 sec)

47.YEARWEEK()

語法:YEARWEEK(date), YEARWEEK(date,mode)
返回周,'0000:01:01'為第一周
mode同week,代表是周一還是昨天為本周的第一周

mysql> select YEARWEEK('0000:01:01');
+------------------------+
| YEARWEEK('0000:01:01') |
+------------------------+
|                      1 |
+------------------------+
1 row in set (0.02 sec)

mysql> select YEARWEEK('2020-05-22');
+------------------------+
| YEARWEEK('2020-05-22') |
+------------------------+
|                 202020 |
+------------------------+
1 row in set (0.00 sec)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容