问题描述
我有一个ETL流程,该流程从Oracle数据库的源中读取数据,其中包括一列类型数字,其中包含时间戳(例如'131516'='HHMMSS')。 在作为Postgres数据库的目标中,该值应写在“时间”类型的列中,其格式应为“ HH:MM:SS”。
我尝试使用to_char,to_date和to_timestamp进行不同的转换,但没有得到合适的结果。
SELECT to_date(to_char(131516,'000000'),'hh24:mi:ss') from table
不幸的是,它返回带有日期的时间戳,但只有时间。
如何获取格式为'HH:MM:SS'的数字作为时间?
谢谢。
解决方法
将数字值传递到ETL中的PostgreSQL。 :
的结果中没有冒号(to_char(131516,'000000')
)字符,因此请勿在格式掩码中包含它们。
将其转换为timestamp
后,将值转换为time
:
select to_timestamp(to_char(131516,'000000'),'HH24MISS')::time;
to_timestamp
--------------
13:15:16
(1 row)
,
请在ETL流程的源查询中使用以下强制转换功能,
SELECT to_char(to_timestamp('131516','hh24miss'),'hh24:mi:ss') from table;
演示 https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=5b890d21c0c27ea7be3ac4b42ad813d1