Sql Postgres-如何在几分钟和几秒钟内将varchar转换为时间?

Sql Postgres-如何在几分钟和几秒钟内将varchar转换为时间?,sql,postgresql,time,casting,Sql,Postgresql,Time,Casting,我有一个列,其数据格式为MI:SS。我需要将其转换为时间数据类型,但在尝试转换为时间时,出现以下错误: select column_time::time 日期/时间字段值超出范围:“29:51” 它似乎期望的格式是HH:MI,因此29超出了范围,导致了问题。我怎样才能解决这个问题 编辑:发现这是可行的,但它有领先的00的小时,我认为是不存在的 TO_TIMESTAMP(column_time, 'MI:SS')::time 请尝试在前面加上“'00:”: select cast(concat

我有一个列,其数据格式为
MI:SS
。我需要将其转换为
时间
数据类型,但在尝试转换为
时间
时,出现以下错误:

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

它似乎期望的格式是HH:MI,因此29超出了范围,导致了问题。我怎样才能解决这个问题

编辑:发现这是可行的,但它有领先的00的小时,我认为是不存在的

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

请尝试在前面加上“
'00:”

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

强制转换和对_timestamp()

to_timestamp
to_date
用于处理无法编辑的输入格式 通过简单的铸造转换。这些函数解释输入 自由地,以最小的错误检查。当他们出示有效的 输出时,转换可能会产生意外的结果。例如 这些功能的输入不受正常范围的限制,因此
截止日期('20096040','yyyyymmdd')
返回
2014-01-17
而不是导致 一个错误。强制转换不具有此行为

一个或另一个可能是您所需要的。
这项工作:

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


行得通,列中的数据现在显示为“00:29:51”,我知道在我没有前导的00之前,我相信我之前只是在做avg(CAST(列时间作为时间))。还有其他想法吗?如果需要,我可以将列_time类型转换为varchar以外的其他类型。@MajorMajor我猜它以前是有效的,因为您的分钟值小于24,所以它似乎有效。