[英]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.