Skip to content

SQL Now() 函数

SQL 提供了用于获取当前系统日期和时间的函数。这些函数对于日志记录、给记录加时间戳或执行基于时间的计算至关重要。

虽然函数名称在不同的数据库系统之间可能略有差异,但标准 SQL 提供了 CURRENT_TIMESTAMP(当前时间戳)、CURRENT_DATE(当前日期)和 CURRENT_TIME(当前时间)。

  • CURRENT_TIMESTAMP: 返回当前的日期和时间(通常包括小数秒和时区信息,具体取决于 RDBMS 和会话设置)。
  • CURRENT_DATE: 返回当前日期。
  • CURRENT_TIME: 返回当前时间。
  • MySQL: NOW(), CURDATE(), CURTIME()
  • PostgreSQL: NOW(), CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME
  • SQL Server: GETDATE(), SYSDATETIME(), CURRENT_TIMESTAMP
  • Oracle: SYSDATE, CURRENT_TIMESTAMP

通常建议使用 ANSI SQL 标准函数(CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME)以获得更好的可移植性,尽管特定于系统的函数可能提供更高的精度或更多功能。

SELECT CURRENT_TIMESTAMP;

SELECT CURRENT_DATE;

SELECT CURRENT_TIME;

我们将使用 Northwind 示例数据库作为背景。

以下是 “Products” 表的选定内容:

ProductID ProductName SupplierID CategoryID Unit Price

1 Chais 1 1 10 boxes x 20 bags 18.00

2 Chang 1 1 24 - 12 oz bottles 19.00

3 Aniseed Syrup 1 2 12 - 550 ml bottles 10.00

4 Chef Anton’s Cajun Seasoning 2 2 48 - 6 oz jars 22.00

5 Chef Anton’s Gumbo Mix 2 2 36 boxes 21.35

以下 SQL 语句选择所有产品的产品名称、价格以及当前时间戳,并将时间戳别名为 QueryTime。此示例使用 CURRENT_TIMESTAMP,该函数得到广泛支持。

SELECT ProductName, Price, CURRENT_TIMESTAMP AS QueryTime
FROM Products;

实际应用:这常用于记录订单下达时间(OrderDate)、用户上次登录时间(LastLoginDate),或生成包含生成时间的报告。

时区:请注意时区问题。CURRENT_TIMESTAMP 可能返回数据库服务器时区或会话时区的时间。为了保持时区处理的一致性,可能需要使用类似 CURRENT_TIMESTAMP AT TIME ZONE 'UTC' 的函数或进行特定的配置。请查阅你的 RDBMS 文档。