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