繁体   English   中英

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

[英]Is there an ANSI/ISO SQL syntax to obtain the current time?

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


显然,有 CURRENT_TIMESTAMP,即 ANSI SQL,但是否有 ANSI SQL 语法来检索它? 一些 DBMS 支持select CURRENT_TIMESTAMP ,其他需要select CURRENT_TIMESTAMP from DUAL 有什么方法可以做到这一点独立于 DBMS?

简短的回答:

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

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

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

例如(SQL 服务器)

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

或在(MySQL)

CREATE VIEW DateTime AS
SELECT
  UTC_TIMESTAMP as UTCDateTime
;

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

但是,许多产品都有自己的功能。

假设您使用 SQL 服务器:

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 |
+---------------------+

看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM