文章目錄
前言
日期和時間函數是用來處理日期和時間函數,一般開發中我們總會遇到這樣的需求:截止到當前時間訂單的數量之和等等,下面將詳細介紹各種日期和時間函數,下面列出了MySQL中常用的日期和時間函數。
1. 獲取當前日期的函數和獲取當前時間的函數
獲取當前日期有CURRENT_DATE() 或CURDATE(),兩者的作用相同,都是獲取當前的日期,輸出將按照‘YYYY-MM-DD’格式進行輸出
mysql> select CURRENT_DATE(),CURDATE();
+----------------+------------+
| CURRENT_DATE() | CURDATE() |
+----------------+------------+
| 2020-06-24 | 2020-06-24 |
+----------------+------------+
1 row in set (0.00 sec)
獲取當前時間可以使用CURRENT_TIME 和CURTIME(),兩者的作用也是相同的,輸出時間的格式將按照’HH:MM:SS’
mysql> select CURRENT_TIME(),CURTIME();
+----------------+-----------+
| CURRENT_TIME() | CURTIME() |
+----------------+-----------+
| 13:48:47 | 13:48:47 |
+----------------+-----------+
1 row in set (0.00 sec)
2. 獲取當前日期時間
在開發中經常有需要獲取當前時間進行數值插入,例如:當生成訂單時需要保存下單時間,CURRRENT_TIMESTAMP()、NOW()、LOCALTIME()、SYSDATE() 都可以當前獲取日期,且四個函數作用是一樣的
mysql> select NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE();
+---------------------+---------------------+---------------------+---------------------+
| NOW() | CURRENT_TIMESTAMP() | LOCALTIME() | SYSDATE() |
+---------------------+---------------------+---------------------+---------------------+
| 2020-06-25 00:11:09 | 2020-06-25 00:11:09 | 2020-06-25 00:11:09 | 2020-06-25 00:11:09 |
+---------------------+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
3. UNIX時間轉換
UNIX_TIMESTAMP(date)函數:返回日期date的unix時間戳,而FROM_UNIXTIME(unixtime) 正好相反是將unix時間戳改爲date類型
mysql> select UNIX_TIMESTAMP(NOW());
+-----------------------+
| UNIX_TIMESTAMP(NOW()) |
+-----------------------+
| 1593015381 |
+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT FROM_UNIXTIME(1593015381);
+---------------------------+
| FROM_UNIXTIME(1593015381) |
+---------------------------+
| 2020-06-25 00:16:21 |
+---------------------------+
1 row in set (0.00 sec)
4. 月份函數
MONTH(date) 返回date所在的月份,返回的值從1-12而MONTHNAME(date) 返回date所對應月份的英文名
mysql> SELECT MONTH(NOW()),MONTHNAME(NOW());
+--------------+------------------+
| MONTH(NOW()) | MONTHNAME(NOW()) |
+--------------+------------------+
| 6 | June |
+--------------+------------------+
1 row in set (0.00 sec)
5. 天數函數
DAYNAME(date) 返回date對應的工作日名稱,DAYOFWEEK(date) 返回指定日期的周索引,索引從0開始直到6
mysql> select DAYNAME(NOW()),DAYOFWEEK(NOW());
+----------------+------------------+
| DAYNAME(NOW()) | DAYOFWEEK(NOW()) |
+----------------+------------------+
| Thursday | 5 |
+----------------+------------------+
1 row in set (0.00 sec)
DAYOFYEAR(date) 返回的是一年中的第幾天,範圍是1-366,DAYOFMONTH(date)返回的是月中的第幾天
mysql> SELECT DAYOFMONTH(NOW()),DAYOFYEAR(NOW());
+-------------------+------------------+
| DAYOFMONTH(NOW()) | DAYOFYEAR(NOW()) |
+-------------------+------------------+
| 25 | 177 |
+-------------------+------------------+
1 row in set (0.00 sec)
6. 年、月、周、日、時、分、秒函數
mysql> select YEAR(NOW()),MONTH(NOW()),DAY(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
+-------------+--------------+------------+-------------+---------------+---------------+
| YEAR(NOW()) | MONTH(NOW()) | DAY(NOW()) | HOUR(NOW()) | MINUTE(NOW()) | SECOND(NOW()) |
+-------------+--------------+------------+-------------+---------------+---------------+
| 2020 | 6 | 25 | 0 | 42 | 55 |
+-------------+--------------+------------+-------------+---------------+---------------+
1 row in set (0.00 sec)
7. 計算日期和時間函數
在開發中經常有時間計算的需求例如查詢3小時前生成的訂單數量等,常見使用函數有DATE_ADD()、DATE_SUB()、DATE_DIFF(),其中前都是兩者計算時間間 DATE_ADD() 執行加法運算,而DATE_SUB()執行減法運算。而DATE_DIFF()計算相隔的天數。
mysql> SELECT DATE_ADD(NOW(), INTERVAL -3 HOUR),DATE_SUB(NOW(),INTERVAL 3 HOUR);
+-----------------------------------+---------------------------------+
| DATE_ADD(NOW(), INTERVAL -3 HOUR) | DATE_SUB(NOW(),INTERVAL 3 HOUR) |
+-----------------------------------+---------------------------------+
| 2020-06-24 21:58:52 | 2020-06-24 21:58:52 |
+-----------------------------------+---------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATEDIFF(now(),'2020-06-20');
+------------------------------+
| DATEDIFF(now(),'2020-06-20') |
+------------------------------+
| 5 |
+------------------------------+
1 row in set (0.00 sec)
上面時間計算是以HOUR爲單位進行計算的,除此之外還可以使用YEAR、MONTH、DAY、HOUR、MINUTE、SECOND等。
8 時間格式化
開發中最常見的格式化函數是DATE_FORMAT(date,pattern)。例如把時間格式化爲我們日常所見的函數格式如下所示:
mysql> select date_format(now(),'%Y-%m-%d %H:%i:%s');
+----------------------------------------+
| date_format(now(),'%Y-%m-%d %H:%i:%s') |
+----------------------------------------+
| 2020-06-25 01:19:42 |
+----------------------------------------+
1 row in set (0.00 sec)
關於更多的正則部分規則可參考這個網址: https://www.w3school.com.cn/sql/func_date_format.asp