Oracle SQL-将数字值转换为实际时间戳(仅限时间-无日期)

Oracle SQL-将数字值转换为实际时间戳(仅限时间-无日期),sql,oracle,postgresql,time,etl,Sql,Oracle,Postgresql,Time,Etl,我有一个从Oracle数据库读取数据的ETL进程,它包含一个类型为number的列,其中包含一个时间戳(例如“131516”=“HHMMSS”)。 在作为postgres数据库的目标中,该值应写入“time”类型的列中,格式应为“HH:MM:SS” 我尝试了对to_char、to_date和to_timestamp的不同转换,但没有得到合适的结果 SELECT to_date(to_char(131516, '000000'), 'hh24:mi:ss') from table 不幸的是,这将

我有一个从Oracle数据库读取数据的ETL进程,它包含一个类型为number的列,其中包含一个时间戳(例如“131516”=“HHMMSS”)。 在作为postgres数据库的目标中,该值应写入“time”类型的列中,格式应为“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')
的结果中没有冒号(
)字符,因此不要将它们包含在格式掩码中

将其转换为
时间戳
后,将值强制转换为
时间

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;
演示

您是在Postgres还是在Oracle中运行SQL?在Postgres中,您可以简单地强制转换它:
131516::text::time
您正在使用哪个ETL进程?我正在使用Pentaho作为ETL堆栈。我知道::text::time函数是Postgres,但源查询是在Oracle上。如果您在Oracle端选择
to_char(131516,'000000')
,这应该可以直接插入Postgres中的
time
列。时间列接受格式为
hh24:mi:ss
的字符串以及格式为
hh24miss
的字符串。这将为我的列返回:不一致的数据类型:-预期,收到的数字。我不希望有字符串值作为结果。我使用Pentaho作为ETL堆栈,其中输出到Postgres的步骤中的值必须已经转换为“time”类型。