簡體   English   中英

將 EPOCH 日期轉換為 oracle 中的時間戳 SQL

[英]Convert EPOCH date to timestamp in oracle SQL

我在數據庫表中得到一個日期格式 EPOCH - “19072”

首先,我需要轉換為時間 - 21/03/2022 並連接 23:59:59 日期轉換參考 - https://www.timeanddate.com/date/dateadded.html?d1=1&m1=1&y1=1970&type=add&ay= &am=&aw=&ad=19072&rec=

現在我需要將“21/03/2022 23:59:59”轉換為 UTC +7:00(印度尼西亞雅加達)最終預計 output 是 - “22/03/2022 06:59:59”

您可以直接向日期添加天數:

select date '1970-01-01' + 19072 from dual;
21-MAR-22

或者在時間戳中添加一個時間間隔; 這可能更合適,因為無論如何您都需要以帶時區的時間戳結束,因此它以 UTC 值開頭:

select timestamp '1970-01-01 00:00:00 UTC' + (19072 * interval '1' day) from dual;
21-MAR-22 00.00.00.000000000 PM UTC

然后你可以添加小時、分鍾和秒(或 go 提前一天並減去一秒):

select 
  timestamp '1970-01-01 00:00:00 UTC'
    + (19072 * interval '1' day)
    + (23 * interval '1' hour)
    + (59 * interval '1' minute)
    + (59 * interval '1' second)
from dual;
21-MAR-22 11.59.59.000000000 PM UTC

並使用at time zone轉換為您的目標時區:

select
  (
    timestamp '1970-01-01 00:00:00 UTC'
      + (19072 * interval '1' day)
      + (23 * interval '1' hour)
      + (59 * interval '1' minute)
      + (59 * interval '1' second)
  )
  at time zone 'Asia/Jakarta'
from dual;
22-MAR-22 06.59.59.000000000 AM ASIA/JAKARTA

然后出於顯示目的,轉換為所需格式的字符串:

select
  to_char(
    (
      timestamp '1970-01-01 00:00:00 UTC'
        + (19072 * interval '1' day)
        + (23 * interval '1' hour)
        + (59 * interval '1' minute)
        + (59 * interval '1' second)
    )
    at time zone 'Asia/Jakarta',
    'DD/MM/YYYY HH24:MI:SS'
  ) as result
from dual;
22/03/2022 06:59:59

你可以通過修改你的時代來簡化一點,雖然它看起來有點奇怪:

select
  to_char(
    (
      timestamp '1970-01-01 23:59:59 UTC'
        + (19072 * interval '1' day)
    )
    at time zone 'Asia/Jakarta',
    'DD/MM/YYYY HH24:MI:SS'
  ) as result
from dual;
22/03/2022 06:59:59

(我可能更願意保留通常的紀元並進行額外的顯式間隔添加......)

數據庫<>小提琴

僅格式化為字符串以顯示它。 如果您需要將值傳遞到其他地方,則將其保留為帶時區的時間戳,或者在必要時將其轉換為普通時間戳甚至日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM