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,所以它似乎有效。