我有一个列,其数据格式为
MI:SS
。我需要将其转换为 TIME
数据类型,但是当尝试转换为 TIME
时,出现以下错误:
select column_time::time
日期/时间字段值超出范围:“29:51”
似乎需要 HH:MI 的格式,因此 29 超出了范围并导致了问题。我该如何解决这个问题?
编辑:发现这个有效,但它有几个小时的前导 00,我认为以前不存在。
TO_TIMESTAMP(column_time, 'MI:SS')::time
强制转换和函数调用之间存在细微差别
to_timestamp()
- 即使在两者都可以工作的情况下也是如此。 说明书:
和to_timestamp
的存在是为了处理无法处理的输入格式 通过简单的铸造即可转换。对于大多数标准日期/时间格式, 只需将源字符串转换为所需的数据类型即可,并且 容易得多。 [...]to_date
其中一个可能就是您所需要的。
这有效:
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
。
SQL Fiddle。(目前已失效)
尝试添加
'00:'
:
select cast(concat('00:', column_time) as time)