[英]convert oracle date format to insert
在應用程序無法插入后,我正在從日志文件中恢復插入。
出於安全原因,不幸的是我不能將插入內容放在這里。
我需要插入一些數據,但我在插入日期時遇到了問題。 我應該如何轉換這個日期 'Tue Dec 31 12:28:59 BRT 2019' 以便能夠插入日期列。
[]的
@OldProgrammer 替換方法的一個變體是將“BRT”作為字符文字嵌入格式掩碼中:
select to_date('Tue Dec 31 12:28:59 BRT 2019',
'DY MON DD HH24:MI:SS "BRT" YYYY',
'NLS_DATE_LANGUAGE=ENGLISH') as result
from dual;
RESULT
-------------------
2019-12-31 12:28:59
我在to_date()
包含了可選的第三個參數,以便日期和月份名稱始終以英文解釋; 否則將使用會話設置,這可能會導致它失敗。
我知道您對時區不感興趣,但是如果您確實想考慮到這一點,您仍然會有些困惑,因為縮寫 BRT 無法轉換為單個區域或偏移量。
由於對您來說明確的縮寫范圍有限,您可以返回到replace()
來替換區域名稱,例如:
select to_timestamp_tz(replace('Tue Dec 31 12:28:59 BRT 2019', 'BRT', 'America/Sao_Paulo'),
'DY MON DD HH24:MI:SS TZR YYYY',
'NLS_DATE_LANGUAGE=ENGLISH') as ts_result,
cast(to_timestamp_tz(replace('Tue Dec 31 12:28:59 BRT 2019', 'BRT', 'America/Sao_Paulo'),
'DY MON DD HH24:MI:SS TZR YYYY',
'NLS_DATE_LANGUAGE=ENGLISH') as date) as date_result,
to_timestamp_tz(replace('Tue Dec 31 12:28:59 BRT 2019', 'BRT', 'America/Sao_Paulo'),
'DY MON DD HH24:MI:SS TZR YYYY',
'NLS_DATE_LANGUAGE=ENGLISH') at time zone 'UTC' as utc_ts_result,
cast(to_timestamp_tz(replace('Tue Dec 31 12:28:59 BRT 2019', 'BRT', 'America/Sao_Paulo'),
'DY MON DD HH24:MI:SS TZR YYYY',
'NLS_DATE_LANGUAGE=ENGLISH') at time zone 'UTC' as date) as utc_date_result
from dual;
TS_RESULT DATE_RESULT UTC_TS_RESULT UTC_DATE_RESULT
--------------------------------------- ------------------- ------------------------- -------------------
2019-12-31 12:28:59.0 AMERICA/SAO_PAULO 2019-12-31 12:28:59 2019-12-31 14:28:59.0 UTC 2019-12-31 14:28:59
由於不必擔心這里的夏令時,這稍微簡化了。 但如您所見,如果需要,您可以輕松轉換為另一個時區。
這似乎有效:
select to_date(replace('Tue Dec 31 12:28:59 BRT 2019','BRT',''),'DY MON DD HH24:MI:SS YYYY') from dual
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.