如何在 SQL 中將紀元時間轉換為日期?


簡介

紀元是計算機時鐘和時間戳值所依據的日期和時間。紀元時間通常用於計算機系統中表示一個時間點。它通常表示為一個單一的整數,表示自紀元以來經過的秒數。

在 SQL 中,您可以使用 to_timestamp() 函式 將紀元時間值轉換為日期。此函式將紀元時間值(通常儲存為 BIGINT 或 INT 資料型別)轉換為帶時區的時間戳值。然後可以使用 `to_char()` 函式將生成的時間戳值格式化為日期。

定義

SQL 中,您可以使用 to_timestamp() 函式將紀元時間值轉換為日期。此函式將紀元時間值(通常儲存為 BIGINT 或 INT 資料型別)轉換為帶時區的時間戳值。然後可以使用 to_char() 函式將生成的時間戳值格式化為日期。

語法

以下是使用這些函式將紀元時間值轉換為日期的基本語法:

SELECT to_char(to_timestamp(epoch_time), 'format') as date FROM my_table;

`epoch_time` 是包含要轉換為日期的紀元時間值的列。

`format` 是一個字串,指定您希望日期以何種格式顯示。此字串應使用以下格式程式碼:

`YYYY`: 4-digit year `MM`: 2-digit month (01-12) `DD`: 2-digit day of the month (01-31) `HH24`: Hour of the day (00-23) `MI`: Minute (00-59) `SS`: Second (00-59)

要點

在 SQL 中將紀元時間轉換為日期時,需要注意以下幾點:

  • 紀元時間,也稱為 Unix 時間,是從 1970 年 1 月 1 日 00:00:00 UTC 開始經過的秒數。

  • 要在 SQL 中將紀元時間轉換為日期,可以使用 `FROM_UNIXTIME()` 函式。例如,要將紀元時間 1577836800 轉換為日期,可以使用以下 SQL 查詢:

SELECT FROM_UNIXTIME(1577836800);
  • `FROM_UNIXTIME()` 函式還允許您指定日期的輸出格式。例如,要將紀元時間 1577836800 轉換為“YYYY-MM-DD HH:MM:SS”格式的日期,可以使用以下 SQL 查詢:

SELECT FROM_UNIXTIME(1577836800,'%Y-%m-%d %H:%i:%s');
  • `FROM_UNIXTIME()` 函式在多個 SQL 資料庫中可用,例如 MySQL、MariaDBAmazon Redshift。但其他資料庫(如 Oracle、MS SQLPostgres 等)的行為可能有所不同。

  • 處理時間戳和時區時,請務必小心謹慎,因為時區上的輕微差異可能會導致時間戳出現偏差(例如,相差一小時)。

  • 仔細檢查儲存轉換日期的列的資料型別。紀元時間是 bigint 列,請確保將轉換後的日期儲存在時間戳或日期時間列中,如果它不是 bigint 型別。

因素

在 SQL 中將紀元時間轉換為日期時,需要考慮幾個因素:

  • 時區 - 紀元時間基於 UTC,因此務必確保您要轉換到的日期的時區正確,尤其是在處理時間戳時。確保您的 SQL 伺服器配置為使用正確的時區,並瞭解您資料的時區。

  • 格式 - 如前所述,FROM_UNIXTIME() 函式允許您指定日期的輸出格式。請務必選擇適合您的用例且與您使用的 SQL 資料庫相容的格式。

  • 資料型別 - 儲存轉換後的日期時,您需要確保列的資料型別與日期的格式相容。例如,如果您以“YYYY-MM-DD HH:MM:SS”格式儲存日期,則列的資料型別應為時間戳或日期時間。

  • 系統日期和時間 - 您的系統日期和時間可能與您正在處理的日期和時間不同。您需要了解您的系統時間所在的時區,並相應地進行調整。

  • 資料一致性 - 仔細處理時區和日期格式對於確保資料在整個系統中保持一致至關重要。一個小錯誤會導致意外的結果和不一致。

  • 查詢效能 - 將大量包含 bigint 時間戳列的資料行轉換為時間戳或日期時間列可能是效能密集型操作。在設計和執行查詢時請注意這一點,並考慮儘可能限制查詢範圍以最大程度地減少資料庫的工作負載。

總的來說,在 SQL 中將紀元時間轉換為日期時,務必瞭解這些因素並相應地進行規劃,以確保獲得準確、一致且高效的結果。

示例 1

以下是如何使用這些函式將儲存在名為 `epoch_time` 的列中的紀元時間值轉換為日期的示例:

SELECT to_char(to_timestamp(epoch_time), 'YYYY-MM-DD HH24:MI:SS') as date FROM my_table;

這將返回一個名為 `date` 的列,其中包含與儲存在 `epoch_time` 中的紀元時間值對應的日期,格式為 `YYYY-MM-DD HH24:MI:SS`。

示例 2

以下是如何使用此函式將儲存在名為 `epoch_time` 的列中的紀元時間值轉換為日期的示例:

SELECT to_timestamp(epoch_time) as date FROM my_table;

這將返回一個名為 `date` 的列,其中包含與儲存在 `epoch_time` 中的紀元時間值對應的日期。

您還可以使用 `to_char()` 函式指定希望日期以何種格式顯示。

SELECT to_char(to_timestamp(epoch_time), 'YYYY-MM-DD HH24:MI:SS') as formatted_date FROM my_table;

這將返回一個名為 `formatted_date` 的列,其中包含格式為 `YYYY-MM-DD HH24:MI:SS` 的日期。

請記住,紀元時間是從紀元(1970 年 1 月 1 日 00:00:00 UTC)開始經過的秒數,因此您需要將其除以一天中的秒數 (86400) 以獲取自紀元以來的天數。

結論

  • 要在 SQL 中將紀元時間轉換為日期,可以使用 `to_timestamp()` 函式將紀元時間值轉換為帶時區的時間戳,然後使用 `to_char()` 函式將時間戳格式化為日期。

  • 可以使用 `YYYY`、`MM`、`DD`、`HH24`、`MI` 和 `SS` 等格式程式碼指定結果日期的格式。

更新於:2023-09-02

65K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.