在本教程中,您将了解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()
函数作为DATETIME
或TIMESTAMP
列的默认值。当您在INSERT语句中省略日期或时间值时,MySQL会将当前日期和时间插入到默认值为NOW()
的列中。
我们来看下面的一个例子。
首先,创建一个名为tmp
的新表,其中包含三个列:id
,title
和created_on
。 created_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_TIMESTAMP
和CURRENT_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()
函数。