首頁 > 軟體

Mysql中的日期時間函數小結

2023-02-03 18:04:10

MySQL中內建了大量的日期和時間函數,能夠靈活、方便地處理日期和時間資料,本節就簡單介紹一下MySQL中內建的日期和時間函數。

1 CURDATE()函數

CURDATE()函數用於返回當前日期,只包含年、月、日部分,格式為YYYY-MM-DD。使用範例如下:

mysql> SELECT CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2019-12-11 |
+------------+
1 row in set (0.00 sec)

CURRENT_DATE()函數的作用與CURDATE()函數相同,不再贅述。

2 CURTIME()函數

CURTIME()函數用於返回當前時間,只包含時、分、秒部分,格式為HH:MM:SS。使用範例如下:

mysql> SELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 11:27:44  |
+-----------+
1 row in set (0.00 sec)

CURRENT_TIME()函數的作用與CURTIME函數相同,不再贅述。

3 NOW()函數

NOW()函數用於返回當前日期和時間,包含年、月、日、時、分、秒,格式為YYYY-MM-DD HH:MM:SS。使用範例如下:

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2019-12-15 11:29:22 |
+---------------------+
1 row in set (0.00 sec)

CURRENT_TIMESTAMP()函數、LOCALTIME()函數、LOCALTIMESTAMP()函數、SYSDATE()函數的作用與NOW()函數相同,不再贅述。

4 UNIX_TIMESTAMP(date)函數

將date轉化為UNIX時間戳。使用範例如下:

mysql> SELECT UNIX_TIMESTAMP(now());
+-----------------------+
| UNIX_TIMESTAMP(now()) |
+-----------------------+
|            1576380910 |
+-----------------------+
1 row in set (0.01 sec)
mysql> SELECT UNIX_TIMESTAMP(CURDATE());
+---------------------------+
| UNIX_TIMESTAMP(CURDATE()) |
+---------------------------+
|                1576339200 |
+---------------------------+
1 row in set (0.00 sec)
mysql> SELECT UNIX_TIMESTAMP(CURTIME());
+---------------------------+
| UNIX_TIMESTAMP(CURTIME()) |
+---------------------------+
|                1576380969 |
+---------------------------+
1 row in set (0.00 sec)

5 FROM_UNIXTIME(timestamp)函數

FROM_UNIXTIME(timestamp)函數將UNIX時間戳轉化為日期時間,格式為YYYY-MM-DD HH:MM:SS,與UNIX_TIMESTAMP(date)函數互為反函數。使用範例如下:

mysql> SELECT FROM_UNIXTIME(1576380910);
+---------------------------+
| FROM_UNIXTIME(1576380910) |
+---------------------------+
| 2019-12-15 11:35:10       |
+---------------------------+
1 row in set (0.00 sec)

6 UTC_DATE()函數

UTC_DATE()函數用於返回UTC日期。使用範例如下:

mysql> SELECT UTC_DATE();
+------------+
| UTC_DATE() |
+------------+
| 2019-12-15 |
+------------+
1 row in set (0.00 sec)

也可以返回YYYYMMDD格式的日期。使用範例如下:

mysql> SELECT UTC_DATE()+0;
+--------------+
| UTC_DATE()+0 |
+--------------+
|     20191215 |
+--------------+
1 row in set (0.00 sec)

7 UTC_TIME()函數

UTC_TIME()函數用於返回UTC時間。使用範例如下:

mysql> SELECT UTC_TIME();
+------------+
| UTC_TIME() |
+------------+
| 06:39:00   |
+------------+
1  row in set (0.00 sec)

8 YEAR(date)函數

YEAR(date)函數用於返回日期所在的年份,取值返回為1970~2069。使用範例如下:

mysql> SELECT YEAR(NOW());
+-------------+
| YEAR(NOW()) |
+-------------+
|        2019 |
+-------------+
1 row in set (0.00 sec)

注意:00~69會被轉化為2000~2069,70~99會被轉化為1970~1999。

9 MONTH(date)函數

MONTH(date)函數用於返回日期對應的月份,取值返回為1~12。使用範例如下:

mysql> SELECT MONTH(NOW());
+--------------+
| MONTH(NOW()) |
+--------------+
|           12 |
+--------------+
1 row in set (0.00 sec)

10 MONTHNAME(date)函數

MONTHNAME(date)函數用於返回日期所在月份的英文名稱。使用範例如下:

mysql> SELECT MONTHNAME(NOW());
+------------------+
| MONTHNAME(NOW()) |
+------------------+
| December         |
+------------------+
1 row in set (0.00 sec)

11 DAY(date)函數

DAY(date)函數只返回日期。使用範例如下:

mysql> SELECT DAY(NOW());
+------------+
| DAY(NOW()) |
+------------+
|         15 |
+------------+
1 row in set (0.00 sec)

12 DAYNAME(date)函數

DAYNAME(date)函數用於返回日期對應星期的英文名稱。使用範例如下:

mysql> SELECT DAYNAME(NOW());
+----------------+
| DAYNAME(NOW()) |
+----------------+
| Sunday         |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT DAYNAME('2020-01-01');
+-----------------------+
| DAYNAME('2020-01-01') |
+-----------------------+
| Wednesday             |
+-----------------------+
1 row in set (0.00 sec)

13 DAYOFWEEK(date)函數

DAYOFWEEK(date)函數用於返回日期對應的一週中的索引值。1表示星期日,2表示星期一,以此類推。使用範例如下:

mysql> SELECT DAYOFWEEK(NOW());
+------------------+
| DAYOFWEEK(NOW()) |
+------------------+
|                 1 |
+------------------+
1 row in set (0.00 sec)
mysql> SELECT DAYOFWEEK('2020-01-01');
+-------------------------+
| DAYOFWEEK('2020-01-01') |
+-------------------------+
|                        4 |
+-------------------------+
1 row in set (0.00 sec)

14 WEEKDAY(date)函數

WEEKDAY(date)函數返回日期對應的一週中的索引值。0表示星期一,1表示星期二,以此類推。使用範例如下:

mysql> SELECT WEEKDAY(NOW());
+----------------+
| WEEKDAY(NOW()) |
+----------------+
|               6 |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT WEEKDAY('2020-01-01');
+-----------------------+
| WEEKDAY('2020-01-01') |
+-----------------------+
|                      2 |
+-----------------------+
1 row in set (0.00 sec)

15 WEEK(date)函數

WEEK(date)函數返回給定日期是一年中的第幾周。使用範例如下:

mysql> SELECT WEEK(NOW());
+-------------+
| WEEK(NOW()) |
+-------------+
|           50 |
+-------------+
1 row in set (0.00 sec)

16 WEEKOFYEAR(date)函數

WEEKOFYEAR(date)函數返回日期位於一年中的第幾周。使用範例如下:

mysql> SELECT WEEKOFYEAR(NOW());
+-------------------+
| WEEKOFYEAR(NOW()) |
+-------------------+
|                 50 |
+-------------------+
1 row in set (0.00 sec)

17 DAYOFYEAR(date)函數

DAYOFYEAR(date)函數返回日期是一年中的第幾天。使用範例如下:

mysql> SELECT DAYOFYEAR(NOW());
+------------------+
| DAYOFYEAR(NOW()) |
+------------------+
|               349 |
+------------------+
1 row in set (0.00 sec)

18 DAYOFMONTH(date)函數

DAYOFMONTH(date)函數返回日期位於所在月份的第幾天。使用範例如下:

mysql> SELECT DAYOFMONTH(NOW());
+-------------------+
| DAYOFMONTH(NOW()) |
+-------------------+
|                 15 |
+-------------------+
1 row in set (0.00 sec)

19 QUARTER(date)函數

QUARTER(date)函數返回日期對應的季度,範圍為1~4。使用範例如下:

mysql> SELECT QUARTER(NOW());
+----------------+
| QUARTER(NOW()) |
+----------------+
|               4 |
+----------------+
1 row in set (0.00 sec)

20 HOUR(time)函數

HOUR(time)函數返回指定時間的小時。使用範例如下:

mysql> SELECT HOUR(NOW());
+-------------+
| HOUR(NOW()) |
+-------------+
|           11 |
+-------------+
1 row in set (0.00 sec)

21 MINUTE(time)函數

MINUTE(time)函數返回指定時間的分鐘,取值範圍0~59。使用範例如下:

mysql> SELECT MINUTE(NOW());
+---------------+
| MINUTE(NOW()) |
+---------------+
|             45 |
+---------------+
1 row in set (0.00 sec)

22 SECOND(time)函數

SECOND(time)函數返回指定時間的秒數,取值範圍0~59。使用範例如下:

mysql> SELECT SECOND(NOW());
+---------------+
| SECOND(NOW()) |
+---------------+
|             22 |
+---------------+
1 row in set (0.00 sec)

23 EXTRACT(type FROM date)函數

EXTRACT(type FROM date)函數返回指定日期中特定的部分,type指定返回的值。其中,type的取值如表11-1所示。

表11-1 EXTRACT(type FROM date)函數中type的取值與含義

注意:當EXTRACT(type FROM date)函數中的type取值為MINUTE_SECOND時,表示返回分鐘和秒值,當date中的分鐘為12,秒為12時,返回的結果為1212。也就是說,將分鐘後面直接拼接上秒值。type取值為其他帶有下劃線的值時,也遵循同樣的規律。

使用範例如下:

mysql> SELECT EXTRACT(HOUR_MINUTE FROM NOW());
+---------------------------------+
| EXTRACT(HOUR_MINUTE FROM NOW()) |
+---------------------------------+
|                             2142 |
+---------------------------------+
1 row in set (0.00 sec)

24 TIME_TO_SEC(time)函數

TIME_TO_SEC(time)函數將time轉化為秒並返回結果值。轉化的公式為:小時*3600+分鐘*60+秒。使用範例如下:

mysql> SELECT TIME_TO_SEC(NOW());
+--------------------+
| TIME_TO_SEC(NOW()) |
+--------------------+
|               78774 |
+--------------------+
1 row in set (0.00 sec)

25 SEC_TO_TIME(seconds)函數

SEC_TO_TIME(seconds)函數將seconds描述轉化為包含小時、分鐘和秒的時間。使用範例如下:

mysql> SELECT SEC_TO_TIME(78774);
+--------------------+
| SEC_TO_TIME(78774) |
+--------------------+
| 21:52:54            |
+--------------------+
1 row in set (0.12 sec)

26 DATE_ADD(date,INTERVAL expr type)函數

DATE_ADD(date,INTERVAL expr type)函數返回與date相差INTERVAL時間間隔的日期,本質上是日期的加操作。該函數中的type是間隔的型別,間隔型別如表11-2所示。

表11-2 DATE_ADD(date,INTERVAL expr type)函數中type的取值

使用範例如下:

mysql> SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);
+---------------------------------+
| DATE_ADD(NOW(), INTERVAL 1 DAY) |
+---------------------------------+
| 2019-12-16 22:04:36              |
+---------------------------------+
1 row in set (0.00 sec)

ADDDATE(date,INTERVAL expr type)函數與DATE_ADD(date,INTERVAL expr type)函數的作用相同,不再贅述。

27 DATE_SUB(date,INTERVAL expr type)函數

DATE_SUB(date,INTERVAL expr type)函數返回與date相差INTERVAL時間間隔的日期,本質上是日期的減操作,其中type的取值見表11-2。使用範例如下:

mysql> SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);
+---------------------------------+
| DATE_SUB(NOW(), INTERVAL 1 DAY) |
+---------------------------------+
| 2019-12-14 22:09:10              |
+---------------------------------+
1 row in set (0.00 sec)

SUBDATE(date,INTERVAL expr type)函數與DATE_SUB(date,INTERVAL expr type)函數作用相同,不再贅述。

注意:DATE_ADD、ADDDATE、DATE_SUB和SUBDATE這4個函數均可以指定負值。

28 ADDTIME(time1,time2)函數

ADDTIME(time1,time2)函數返回time1加上time2的時間。其中,time2是一個表示式,也可以是一個數位,當time2為一個數位時,代表的是秒。使用範例如下:

mysql> SELECT ADDTIME(NOW(), 50);
+---------------------+
| ADDTIME(NOW(), 50)  |
+---------------------+
| 2019-12-15 22:17:47 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDTIME(NOW(), '1:1:1');
+-------------------------+
| ADDTIME(NOW(), '1:1:1') |
+-------------------------+
| 2019-12-15 23:18:46     |
+-------------------------+
1 row in set (0.00 sec)

ADDTIME(NOW(),'1:1:1')表示的含義為返回為當前時間加上1小時1分1秒之後的時間。

ADDTIME(time1,time2)函數中的time2的值也可以為負值。

mysql> SELECT ADDTIME(NOW(), '-1:-1:-1');
+----------------------------+
| ADDTIME(NOW(), '-1:-1:-1') |
+----------------------------+
| 2019-12-15 22:19:29         |
+----------------------------+
1 row in set, 1 warning (0.01 sec)

ADDTIME(NOW(),'-1:-1:-1')表示的含義為返回當前時間減去1小時1分1秒之後的時間。

29 SUBTIME(time1,time2)函數

SUBTIME(time1,time2)函數返回time1減去time2後的時間。其中,time2是一個表示式,也可以是一個數位,當time2為一個數位時,代表的是秒。使用範例如下:

mysql> SELECT SUBTIME(NOW(), 50);   
+---------------------+
| SUBTIME(NOW(), 50)  |
+---------------------+
| 2019-12-15 22:23:35 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBTIME(NOW(), '1:1:1');
+-------------------------+
| SUBTIME(NOW(), '1:1:1') |
+-------------------------+
| 2019-12-15 21:23:50     |
+-------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBTIME(NOW(), '-1:-1:-1'); 
+----------------------------+
| SUBTIME(NOW(), '-1:-1:-1') |
+----------------------------+
| 2019-12-15 22:25:11        |
+----------------------------+
1 row in set, 1 warning (0.00 sec)

30 DATEDIFF(date1,date2)函數

DATEDIFF(date1,date2)函數計算兩個日期之間相差的天數。使用範例如下:

mysql> SELECT DATEDIFF(NOW(), '1970-01-01');
+-------------------------------+
| DATEDIFF(NOW(), '1970-01-01') |
+-------------------------------+
|                          18245 |
+-------------------------------+
1 row in set (0.00 sec)

31 FROM_DAYS(N)函數

FROM_DAYS(N)函數返回從0000年1月1日起,N天以後的日期。使用範例如下:

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

32 LAST_DAY(date)函數

LAST_DAY(date)函數返回date所在月份的最後一天的日期。使用範例如下:

mysql> SELECT LAST_DAY(NOW());
+-----------------+
| LAST_DAY(NOW()) |
+-----------------+
| 2019-12-31      |
+-----------------+
1 row in set (0.00 sec)

33 MAKEDATE(year,n)函數

MAKEDATE(year,n)函數針對給定年份與所在年份中的天數返回一個日期。使用範例如下:

mysql> SELECT MAKEDATE(2020,1);
+------------------+
| MAKEDATE(2020,1) |
+------------------+
| 2020-01-01       |
+------------------+
1 row in set (0.00 sec)
mysql> SELECT MAKEDATE(2020,32);
+-------------------+
| MAKEDATE(2020,32) |
+-------------------+
| 2020-02-01        |
+-------------------+
1 row in set (0.00 sec)

34 MAKETIME(hour,minute,second)函數

將給定的小時、分鐘和秒組合成時間並返回。使用範例如下:

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

35 PERIOD_ADD(time,n)函數

PERIOD_ADD(time,n)函數返回time加上n後的時間。使用範例如下:

mysql> SELECT PERIOD_ADD(20200101010101,1);
+------------------------------+
| PERIOD_ADD(20200101010101,1) |
+------------------------------+
|               20200101010102 |
+------------------------------+
1 row in set (0.00 sec)

36 TO_DAYS(date)函數

TO_DAYS(date)函數返回日期date距離0000年1月1日的天數。使用範例如下:

mysql> SELECT TO_DAYS(NOW());
+----------------+
| TO_DAYS(NOW()) |
+----------------+
|          737773 |
+----------------+
1 row in set (0.00 sec)

37 DATE_FORMAT(date,format)函數

DATE_FORMAT(date,format)函數按照指定的格式format來格式化日期date。其中,format常用的格式符如表11-3所示。

表11-3 DATE_FORMAT(date,format)函數中format常用的格式符

使用範例如下:

mysql> SELECT DATE_FORMAT(NOW(), '%H:%i:%s');
+--------------------------------+
| DATE_FORMAT(NOW(), '%H:%i:%s') |
+--------------------------------+
| 22:57:34                        |
+--------------------------------+
1 row in set (0.00 sec)

38 TIME_FORMAT(time,format)函數

TIME_FORMAT(time,format)函數按照指定的格式format來格式化日期date。其中,format常用的格式符見表11-3。使用範例如下:

mysql> SELECT TIME_FORMAT(NOW(), '%H:%i:%s');    
+--------------------------------+
| TIME_FORMAT(NOW(), '%H:%i:%s') |
+--------------------------------+
| 22:59:40                        |
+--------------------------------+
1 row in set (0.00 sec)

39 GET_FORMAT(date_type,format_type)函數

GET_FORMAT(date_type,format_type)函數返回日期字串的顯示格式,其中date_type表示日期型別,format_type表示格式化型別。日期型別與格式化型別的取值如表11-4所示。

表11-4 GET_FORMAT函數返回的格式化字串

使用範例如下:

mysql> SELECT GET_FORMAT(DATE, 'USA');
+-------------------------+
| GET_FORMAT(DATE, 'USA') |
+-------------------------+
| %m.%d.%Y                |
+-------------------------+
1 row in set (0.00 sec)

40 STR_TO_DATE(str,format)函數

STR_TO_DATE(str,format)函數將字串str按照format格式轉化為日期或時間。其中,format的取值見表11-3。使用範例如下:

mysql> SELECT STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d'); 
+-----------------------------------------------+
| STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d') |
+-----------------------------------------------+
| 2020-01-01                                     |
+-----------------------------------------------+
1 row in set, 1 warning (0.00 sec)

到此這篇關於Mysql中的日期時間函數小結的文章就介紹到這了,更多相關Mysql 日期時間函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com