是否有ANSI/ISO SQL语法来获取当前时间



我想使用标准SQL获取数据库的当前时间。结果必须以UTC为单位或带有时区信息。这可能吗?如果是,如何?


显然,有CURRENT_TIMESTAMP,它是ANSI SQL,但有ANSI SQL语法可以检索吗?一些DBMS支持select CURRENT_TIMESTAMP,另一些则需要select CURRENT_TIMESTAMP from DUAL。有没有办法使这个DBMS独立?

ANSI/ISO SQL标准具有CURRENT_TIME以获取带有时区信息的时间,以及LOCALTIME以获取不带时差信息的时间。

然而,许多产品都有自己的功能。

简短回答:

没有标准的函数可以做到这一点(据我所知(。每个供应商都实现了自己的功能来处理日期和时间,包括检索当前时间

请参阅@jarlh对此的回答。

可能的解决方案(假设您可以控制数据库(:

您可以使用(或代理(特定于供应商的函数创建包含一条记录的视图,并将其用作应用程序中的源。

例如(SQL Server(

CREATE VIEW dbo.[DateTime] AS
SELECT
SYSUTCDATETIME() AS UTCDateTime
;

或在(MySQL(中

CREATE VIEW DateTime AS
SELECT
UTC_TIMESTAMP as UTCDateTime
;

假设您使用SQL server:

SELECT CONVERT(varchar(10), GETUTCDATE(), 108)

ANSI SQL执行此操作的方法是使用VALUES语句。这与SELECT语句类似,因为它返回一个结果集。但它没有引用任何表。这是执行类似Oracle的DUAL伪表的功能的标准方法。

下面是一个使用MySQL 8.0的演示:

mysql> VALUES ROW(CURRENT_TIMESTAMP);
+---------------------+
| column_0            |
+---------------------+
| 2021-11-22 14:56:58 |
+---------------------+

参见:

  • https://dev.mysql.com/doc/refman/8.0/en/values.html
  • https://modern-sql.com/feature/values

最新更新