Postgres - 如何使用几分钟和几秒钟将varchar转换为时间?

时间:2014-11-08 04:07:29

标签: sql postgresql time casting

我的列中的数据格式为MI:SS。我需要将其转换为TIME数据类型,但在尝试转换为TIME时,我收到以下错误:

select column_time::time
  

日期/时间字段值超出范围:“29:51”

似乎期待HH:MI的格式,因此29超出范围并导致问题。我该如何解决这个问题?

编辑:发现这个有效,但它已经领先00个小时了,我认为之前不存在。

TO_TIMESTAMP(column_time, 'MI:SS')::time

2 个答案:

答案 0 :(得分:2)

强制转换与函数调用to_timestamp()之间存在细微差别 - 即使在其中任何一个都有效的情况下也是如此。

Per documentation:

  存在

to_timestampto_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

SQL Fiddle.

答案 1 :(得分:1)

尝试预先'00:'

select cast(concat('00:', column_time) as time)