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

Maj*_*jor 5 sql postgresql time casting

我有一个列,其中的数据格式为MI:SS. 我需要将其转换为TIME数据类型,但是当尝试转换为数据类型时TIME,出现以下错误:

select column_time::time
Run Code Online (Sandbox Code Playgroud)

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

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

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

TO_TIMESTAMP(column_time, 'MI:SS')::time
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 6

强制转换和函数调用之间存在细微的差别to_timestamp()——即使在两者都可以工作的情况下也是如此。手册:

to_timestampto_date用于处理无法通过简单转换进行转换的输入格式。对于大多数标准日期/时间格式,只需将源字符串转换为所需的数据类型即可,而且要容易得多。[...]

其中之一可能就是您所需要的。
这有效:

SELECT to_timestamp('129:51', 'MI:SS')::time AS col_overtime

02:09:51
Run Code Online (Sandbox Code Playgroud)

但这并不:

SELECT cast('00:' || '129:51' AS time) AS col_overtime
Run Code Online (Sandbox Code Playgroud)

当简单地转换'29:51'::time最小格式时,被认为是HH24:MI,而不是MI:SS

SQL 小提琴。(目前已死亡)


Gor*_*off 1

尝试前置'00:'

select cast(concat('00:', column_time) as time)
Run Code Online (Sandbox Code Playgroud)