程序員需掌握的SQL時間函數(五)

前言

日期和時間函數是用來處理日期和時間函數,一般開發中我們總會遇到這樣的需求:截止到當前時間訂單的數量之和等等,下面將詳細介紹各種日期和時間函數,下面列出了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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章