我在预言机中有一个日期字段,它返回
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;
干杯!!