摘要:在本教程中,您将了解MySQL NOW()
函数并在各种上下文中应用NOW
函数。
MySQL NOW()
函数简介
MySQL NOW()
函数以'YYYY-MM-DD HH:MM:DD'
或'YYYYMMDDHHMMSS.uuuuuu'
格式的字符串或数字形式返回配置时区中的当前日期和时间。
NOW()
函数的返回类型取决于使用它的上下文。例如,在以下语句中, NOW()
函数以字符串形式返回当前日期和时间:
SELECT NOW();
Code language: SQL (Structured Query Language) (sql)
但是,在以下示例所示的数字上下文中, NOW()
函数以数字形式返回当前日期和时间:
SELECT NOW() + 0;
Code language: SQL (Structured Query Language) (sql)
请注意, NOW()
函数返回语句开始执行的常量日期和时间。请参见以下示例:
SELECT NOW(), SLEEP(5), NOW();
Code language: SQL (Structured Query Language) (sql)
在查询中,执行第一个NOW()
函数, SLEEP(5)
函数暂停查询的执行 5 秒,然后执行第二个NOW()
函数。然而,尽管两个NOW()
函数在不同时间执行,但它们返回相同的值。
如果你想获得语句执行的准确时间,你需要使用SYSDATE()
来代替;请参见以下示例:
SELECT SYSDATE(), SLEEP(5), SYSDATE();
Code language: SQL (Structured Query Language) (sql)
如果要更改 MySQL 服务器的时区以调整NOW()
函数返回的当前日期和时间,请使用以下语句:
SET time_zone = your_time_zone;
Code language: SQL (Structured Query Language) (sql)
MySQL NOW()
函数计算
由于NOW()
函数在数字上下文中使用时会返回一个数字,因此您可以在计算中使用它,例如现在加 1 小时、现在减 1 小时和现在加 1 天。
以下语句返回当前日期和时间,现在减 1 小时,现在加 1 小时:
-- 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';
Code language: SQL (Structured Query Language) (sql)
以下语句返回当前日期和时间,现在减 1 天,现在加 1 天:
-- 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';
Code language: SQL (Structured Query Language) (sql)
使用 MySQL NOW()
函数为列提供默认值
您可以使用NOW()
函数为DATETIME
或TIMESTAMP
列提供默认值。当您在INSERT
语句中省略日期或时间值时,MySQL 会将当前日期和时间插入到默认值为NOW()
的列中。
让我们看一下下面的例子。
首先,创建一个名为tmp
的新表,其中包含三列: id
、 title
和created_on
。 created_on
列有一个由NOW()
函数指定的默认值。
CREATE TABLE tmp(
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
created_on DATETIME NOT NULL DEFAULT NOW() -- or CURRENT_TIMESTAMP
);
Code language: SQL (Structured Query Language) (sql)
请注意, CURRENT_TIMESTAMP
和CURRENT_TIMESTAMP()
是NOW()
的同义词,因此您可以互换使用它们。
其次,将新行插入到tmp
表中,而不指定created_on
列的值:
INSERT INTO tmp(title)
VALUES('Test NOW() function');
Code language: SQL (Structured Query Language) (sql)
三、从tmp
表中查询数据:
SELECT * FROM tmp;
Code language: SQL (Structured Query Language) (sql)
created_on
列的值已更新为执行INSERT
语句的当前日期和时间。
在本教程中,我们向您介绍了 MySQL NOW()
函数,该函数返回语句执行的当前日期和时间。