簡體   English   中英

將 oracle 日期格式轉換為插入

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

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