繁体   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