簡體   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