MySQL now()函式

2019-10-16 22:55:11

在本教學中,您將了解MySQL NOW()函式,並在各種上下文中應用NOW()函式。

MySQL NOW()函式簡介

MySQL NOW()函式以"YYYY-MM-DD HH:MM:DD""YYYYMMDDHHMMSS.uuuuuuu"格式的字串或數位返回組態的時區中的當前日期和時間。

NOW()函式的返回型別取決於使用它的上下文。 例如,在以下語句中,NOW()函式以字串形式返回當前日期和時間:

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2017-08-10 05:42:21 |
+---------------------+
1 row in set

但是,在數值上下文中,NOW()函式返回當前日期和時間作為數位:

mysql> SELECT NOW() + 0;
+----------------+
| NOW() + 0      |
+----------------+
| 20170810054252 |
+----------------+
1 row in set

請注意,NOW()函式在該語句開始執行時返回一個日期和時間的常數。請參閱以下範例:

mysql> SELECT NOW(), SLEEP(5), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(5) | NOW()               |
+---------------------+----------+---------------------+
| 2017-08-10 05:45:14 |        0 | 2017-08-10 05:45:14 |
+---------------------+----------+---------------------+
1 row in set

在上面查詢中,執行第一個NOW()函式,SLEEP(5)函式暫停執行查詢5秒,然後執行第二個NOW()函式。 然而,兩個NOW()函式返回相同的值,儘管它們在不同的時間執行。

如果您想要準確指定執行語句的時間,則可使用SYSDATE(); 請參見以下範例:

mysql> SELECT SYSDATE(), SLEEP(5), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(5) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2017-08-10 05:47:05 |        0 | 2017-08-10 05:47:10 |
+---------------------+----------+---------------------+
1 row in set

如果要更改MySQL伺服器的時區以調整NOW()函式返回的當前日期和時間,則使用以下語句:

SET time_zone = 你要的時區;

MySQL NOW()函式計算

因為NOW()函式在數位上下文中使用時會返回一個數位,所以您可以在計算中使用它,例如當前時間加上1小時,現在減去2小時,當前時間加1天,當前時間減去指定天數等。

以下語句返回當前日期和時間,當前時間減去1小時,當前時間加1小時:

mysql>-- mysql now minus 1 hour
SELECT (NOW() - INTERVAL 1 HOUR) 'NOW - 1 hour',
        NOW(),
       -- mysql now plus 1 hour
       NOW() + INTERVAL 1 HOUR 'NOW + 1 hour';
+---------------------+---------------------+---------------------+
| NOW - 1 hour        | NOW()               | NOW + 1 hour        |
+---------------------+---------------------+---------------------+
| 2017-08-10 04:49:50 | 2017-08-10 05:49:50 | 2017-08-10 06:49:50 |
+---------------------+---------------------+---------------------+
1 row in set

以下語句返回當前日期和時間,當前日期和時間減去1天,加1天:


mysql> -- mysql now minus 1 day
SELECT (NOW() - INTERVAL 1 DAY) 'NOW - 1 day',
        NOW(),
        -- mysql now plus 1 day
        (NOW() + INTERVAL 1 DAY) 'NOW + 1 day';
+---------------------+---------------------+---------------------+
| NOW - 1 day         | NOW()               | NOW + 1 day         |
+---------------------+---------------------+---------------------+
| 2017-08-09 05:50:47 | 2017-08-10 05:50:47 | 2017-08-11 05:50:47 |
+---------------------+---------------------+---------------------+
1 row in set

MySQL NOW()作為列的預設值

您可以使用NOW()函式作為DATETIMETIMESTAMP列的預設值。當您在INSERT語句中省略日期或時間值時,MySQL會將當前日期和時間插入到預設值為NOW()的列中。

我們來看下面的一個例子。

首先,建立一個名為tmp的新表,其中包含三個列:idtitlecreated_oncreated_on列具有由NOW()函式指定的預設值。

USE testdb;
CREATE TABLE tmp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    created_on DATETIME NOT NULL DEFAULT NOW() -- or CURRENT_TIMESTAMP
);

請注意,CURRENT_TIMESTAMPCURRENT_TIMESTAMP()NOW()的同義詞,因此可以互換使用它們。

第二步,在tmp表中插入一個新行,而不指定created_on列的值:

INSERT INTO tmp(title)
VALUES('Test NOW() function');

第三步,從tmp表查詢資料:

mysql> SELECT * FROM tmp;
+----+---------------------+---------------------+
| id | title               | created_on          |
+----+---------------------+---------------------+
|  1 | Test NOW() function | 2017-08-10 05:55:17 |
+----+---------------------+---------------------+
1 row in set

created_on列的值已更新為執行INSERT語句的當前日期和時間。

在本教學中,我們向您介紹了返回執行語句的當前日期和時間的MySQL NOW()函式。