簡體   English   中英

將字符串轉換為 oracle sql 時間戳 Mon Aug 19 2019 08:21:48 GMT-0700 (PDT)

[英]convert a string to oracle sql timestamp Mon Aug 19 2019 08:21:48 GMT-0700 (PDT)

問候社區。

我在 Java 中看到了類似的例子,但我們如何做到這一點 SQL 特別是 Oracle。 現在我只是這樣做,因為我們在 PDT 時區。

-感謝您的幫助!

with xx as ( 
select replace('Mon Aug 19 2019 08:21:48 GMT-0700 (PDT)',' GMT-0700 (PDT)','') as dt from dual

)

select to_date(dt,'DY MON DD YYYY HH24:MI:SS') from xx

輸入是帶時區的時間戳。 它有關於時區的冗余信息; 其中一些必須被剝離。 例如,如果您選擇信任 PDT 並忽略 GMT 偏移量,您可以執行以下操作:

with xx as ( 
select regexp_replace('Mon Aug 19 2019 08:21:48 GMT-0700 (PDT)','GMT-\d{4} \(|\)') 
       as str_ts_with_tz 
from   dual
)
select to_timestamp_tz(str_ts_with_tz,'Dy Mon DD YYYY HH24:MI:SS TZD') 
       as oracle_ts_with_tz 
from   xx
;



ORACLE_TS_WITH_TZ                      
---------------------------------------
2019-08-19 08:21:48 America/Los_Angeles

請注意,結果數據類型是帶時區的時間戳。 如果需要,您可以進一步將其轉換為時間戳或日期(只需丟棄時區信息); 這是 Oracle 內部的一個簡單操作。 但這丟失信息; 在你這樣做之前三思而后行。

另請注意,與您的輸入相比,時間戳在我的輸出中以不同的格式顯示。 這是因為我的NLS_TIMESTAMP_TZ_FORMAT'yyyy-mm-dd hh24:mi:ss tzr'

如果您想知道為什么必須對時區信息做出選擇(這意味着“為什么需要先刪除部分輸入字符串”):PDT 與 GMT-0700 完全不同。 夏天可能會這樣,但冬天不會。 Oracle 不會接受這種自相矛盾的廢話作為其功能的輸入。 要么是 GMT-0700,要么是 PDT,不能兩者兼而有之。 而且,您不能只使用 REPLACE(無論如何都不容易),因為必須替換的內容可能包含可變字符。

暫無
暫無

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

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