Postgres - 如何将 varchar 转换为仅需要分钟和秒的时间?

问题描述 投票:0回答:2

我有一个列,其数据格式为

MI:SS
。我需要将其转换为
TIME
数据类型,但是当尝试转换为
TIME
时,出现以下错误:

select column_time::time

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

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

编辑:发现这个有效,但它有几个小时的前导 00,我认为以前不存在。

TO_TIMESTAMP(column_time, 'MI:SS')::time
sql postgresql time casting
2个回答
6
投票

强制转换和函数调用之间存在细微差别

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。(目前已失效)


1
投票

尝试添加

'00:'
:

select cast(concat('00:', column_time) as time)
© www.soinside.com 2019 - 2024. All rights reserved.