将 Oracle Date 转换为 RFC 3339 格式



我在预言机中有一个日期字段,它返回

17-四月-19 12:00:00 AM

我还有一个时间列(VARCHAR(,它在军事中返回HHMM

1810

我想结合这两个字段来创建格式化为 RFC 3339 标准的时间戳。最好是这样。

2019-04-17T18:10:00Z

我可以使用以下命令将时间戳转换为正确的时间:

SELECT
TO_CHAR(
SYSTIMESTAMP AT TIME ZONE 'UTC',
'yyyy-mm-dd"T"hh24:mi:ss"Z"'
)
FROM dual;

有没有办法将我的日期和时间字段转换为这种时间戳格式?日期字段上的时间不正确,需要替换为时间字段。

你可以TRUNC把你的约会吃到午夜,然后用NUMTODSINTERVAL给它添加小时和分钟,以获得正确的时间部分:

甲骨文设置

CREATE TABLE your_table ( your_date_column, your_time_column ) AS
SELECT DATE '2019-04-17', '1810' FROM DUAL

查询

SELECT TO_CHAR(
TRUNC( your_date_column )
+ NUMTODSINTERVAL( SUBSTR( your_time_column, 1, 2 ), 'HOUR' )
+ NUMTODSINTERVAL( SUBSTR( your_time_column, 3, 2 ), 'MINUTE' ),
'YYYY-MM-DD"T"HH24:MI:SS"Z"'
) AS combined_date_time
FROM   your_table

输出

|COMBINED_DATE_TIME | |:------------------- | |2019-04-17T18:10:00Z |

db<>小提琴在这里

如果您希望该值作为TIMESTAMP WITH TIME ZONE则:

SELECT CAST(
TRUNC( your_date_column )
+ NUMTODSINTERVAL( SUBSTR( your_time_column, 1, 2 ), 'HOUR' )
+ NUMTODSINTERVAL( SUBSTR( your_time_column, 3, 2 ), 'MINUTE' )
AS TIMESTAMP
) AT TIME ZONE 'UTC' AS combined_date_time
FROM   your_table

只需做一些字符串连接

to_char( your_date, 'yyyy-mm-dd' ) || 
'T' ||
substr( your_time, 1, 2 ) ||
':' ||
substr( your_time, 3, 2 ) ||
':00Z'

假设your_time始终为 4 个字符长(即 2 AM 表示为字符串"0200"而不是"200"(。 这也假设秒将始终为"00"。

您可以通过将your_number转换为分钟并将其添加到日期,然后将其转换为时间戳来实现此目的,如下所示:

SELECT CAST(
your_date + 
(FLOOR(YOUR_TIME/100)*60 + MOD(YOUR_TIME,100)) / 1440
AS TIMESTAMP
) AT TIME ZONE 'UTC' AS YOUR_TIME_STAMP
FROM   your_table;

干杯!!

最新更新