sql - 将带有时区的时间戳转换为时间戳
问题描述
试图将一些数据插入到一个表中。但是,我尝试收到数据兼容性问题。我尝试插入的列是 timestamp(6) 列,而我从中提取数据的列是带有时区列的时间戳。我知道如何使用强制转换从时间戳转换为带有时区的时间戳,但不是相反的。有没有办法可以去掉“UTC”?
我开始的日期:
'20-MAY-18 09.00.00.000000000 AM UTC'
我想结束的日期:
'20-MAY-18 09.00.00.000000000 AM'
到目前为止我所尝试的:
select to_date('20-MAY-18 09.00.00.000000000 AM UTC', 'dd-mon-yy hh:mi:ss A.M.') from dual;
但是我收到一个错误,我似乎无法弄清楚,我做错了什么?提前致谢!
解决方案
您可以将带有时区的时间戳转换为普通时间戳:
cast(<your_value> as timestamp)
所以你的价值:
select cast(
to_timestamp_tz('20-MAY-18 09.00.00.000000000 AM UTC', 'DD-MON-RR HH:MI:SS.FF AM TZR')
as timestamp)
from dual;
CAST(TO_TIMESTAMP_T
-------------------
2018-05-20 09:00:00
如果您将带有 tome zone 值的时间戳作为时间戳插入到普通时间戳列中,那么它将自动转换,只是丢失其绑定区域信息。
如果这些值可能并不总是 UTC,那么您可以一次性将它们转换为 UTC 和普通时间戳sys_extract_tc()
:
with cte (tsz) as (
select timestamp '2018-05-20 09:00:00.0 UTC' from dual
union all select timestamp '2018-05-20 13:00:00.0 America/New_York' from dual
)
select tsz, cast(tsz as timestamp) as ts, sys_extract_utc(tsz) utc
from cte;
TSZ TS UTC
------------------------------ ------------------- -------------------
2018-05-20 09:00:00.000 +00:00 2018-05-20 09:00:00 2018-05-20 09:00:00
2018-05-20 13:00:00.000 -04:00 2018-05-20 13:00:00 2018-05-20 17:00:00
推荐阅读
- php - 如何从特定于 id 的 mysql 数据库在我的 .blade 视图页面上显示照片
- javascript - 使用 R 中的 Leaflet 的 Leaftime 插件创建的时间线图中的图层控制
- python - 读取熊猫数据框中的 np 数组
- excel - Excel/VBA/Onedrive 中的方括号问题?
- java - 无法重定向到其他 FXML
- javascript - 在Javascript中运行“x”时间后将停止“n”时间的计时器任务
- c++ - 插入排序高级分析的代码优化
- python - 有什么办法可以在python中加入下面提到的两个数据表
- pentaho - SQL Server Native Connection 未按预期实际连接
- r - 使用不同的公式计算 R 中 data.table 中的列