我的列中的数据格式为MI:SS
。我需要将其转换为TIME
数据类型,但在尝试转换为TIME
时,我收到以下错误:
select column_time::time
日期/时间字段值超出范围:“29:51”
似乎期待HH:MI的格式,因此29超出范围并导致问题。我该如何解决这个问题?
编辑:发现这个有效,但它已经领先00个小时了,我认为之前不存在。
TO_TIMESTAMP(column_time, 'MI:SS')::time
答案 0 :(得分:2)
强制转换与函数调用to_timestamp()
之间存在细微差别 - 即使在其中任何一个都有效的情况下也是如此。
存在
to_timestamp
和to_date
来处理无法输入的格式 通过简单的铸造转换。这些函数解释输入 自由地,最小的错误检查。虽然它们产生有效 输出,转换可以产生意想不到的结果。例如, 因此,对这些功能的输入不受正常范围的限制to_date('20096040','YYYYMMDD')
返回2014-01-17
而不是导致 一个错误。 Casting没有这种行为。
您可能需要其中一种 这有效:
SELECT to_timestamp('129:51', 'MI:SS')::time AS col_overtime
02:09:51
但这不是:
SELECT cast('00:' || '129:51' AS time) AS col_overtime
当简单地投射'29:51'::time
时,最小格式被视为HH24:MI
,而不是MI:SS
。
答案 1 :(得分:1)
尝试预先'00:'
:
select cast(concat('00:', column_time) as time)