sql - 将日期 oracle 的时间戳转换为 ISO-8601 日期数据类型
问题描述
我正在寻找 Oracle 12c 中的查询,以将欧洲时区的 a 转换18-12-2003 13:15:00
为2003-12-18T13:15:00+01:00
datetime 数据类型。
这是可能的还是我错过了什么?
解决方案
如果要将列中的所有日期转换为 CET 时区的格式,并且确定偏移量始终为 1,则可以执行以下操作:
SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', '1:00'),'YYYY"-"MM"-"DD"T"HH24":"MI":"SSTZR')
FROM DUAL;
但是,问题是如何处理夏令时。夏令时生效时偏移量会改变吗?那里有很多考虑因素 - 这个问题(感谢@Wernfried Domscheit)有一个很好的概述。
例如,如果您的数据在 UTC 时区,并且您想在 CET 中显示它,那么您可以像这样转换它:
请注意,夏季偏移 2 小时,冬季偏移 1 小时。
WITH dates (season,dt) AS
(
SELECT 'summer', TO_DATE('01-AUG-2021','DD-MON-YYYY') FROM DUAL UNION ALL
SELECT 'winter', TO_DATE('01-JAN-2021','DD-MON-YYYY') FROM DUAL
)
SELECT dt,
season,
TO_CHAR(
FROM_TZ( CAST( dt AS TIMESTAMP ), 'UTC' )
AT TIME ZONE 'CET',
'YYYY-MM-DD HH24:MI:SS TZH:TZM TZR'
) AS cet_timezone
FROM dates;
01-AUG-2021 summer 2021-08-01 02:00:00 +02:00 CET
01-JAN-2021 winter 2021-01-01 01:00:00 +01:00 CET
推荐阅读
- java - 使用共享偏好更改所有活动的背景
- elasticsearch - ElasticSearch / Kibana 时间戳 - 字段还是_source?
- java - 从 json 映射到对象时得到错误的结果
- python - 使用 docker - gunicorn 多个工人与副本
- django - 如何创建将其他模型中的对象添加到其中的模型
- camera - 相机在最新版本的android或8以上版本的nativescript中崩溃。有什么解决方案吗
- python - 有没有办法在python中找到带有TF-IDF的句子的weitage
- sql - 更改 SQL 表中的 URL
- c - 如何强制 IAR 继续链接中断相关函数?
- sql - 如何使用原始表中的序列 ID 创建可插入视图?