【问题标题】:Transform days into hours in postgres在 postgres 中将天转换为小时
【发布时间】:2020-12-21 16:21:10
【问题描述】:

在 Postgres 查询中,我有 Hours、Minute、Second 和 days 作为结果。我想把一切都转换成小时。

例子

Row 1 result: 19:53:45
Row 2 result: 1 day 05:41:58

现在我想将天转换为小时,如下所示

   Row 1 result:19:53:45
    Row 2 result: 29:41:58

有人可以帮我在 postgres sql 中怎么做吗?

【问题讨论】:

标签: sql postgresql


【解决方案1】:

cast(col as interval hour to minute) 根据标准 SQL 应该可以工作。

无论如何,这似乎有效:

col - extract(day from col) * interval '1'  day  -- remove the days 
    + extract(day from col) * interval '24' hour -- and add back as hours

fiddle

【讨论】:

  • 它可以正常工作 1 天。我的行结果可能有 n 天。你能帮我涵盖一整天的场景吗?前 2 天、10 天等
  • 它可以工作很多天,至少在我的小提琴中。它有什么问题?
【解决方案2】:

您可能希望将结果作为字符串,因为时间限制为 24 小时。您可以将其构造为:

select *,
       (case when ar[1] like '%day%'
             then (split_part(col, ' ', 1)::int * 24 + split_part(ar[1], ' ', 3)::int)::text ||
                  right(col, 6)
             else col
        end)
from (values ('19:53:45'), ('1 day 05:41:58')) v(col) cross join lateral
     regexp_split_to_array(col, ':') a(ar);

你也可以不使用a

select *, 
       (case when col like '%day%'
             then (split_part(col, ' ', 1)::int * 24 + (regexp_match(col, ' ([0-9]+):'))[1]::int)::text ||
                  right(col, 6)
             else col
        end)
from (values ('19:53:45'), ('1 day 05:41:58')) v(col) ;

【讨论】:

  • 它可以正常工作 1 天。我的行结果可能有 n 天。你能帮我涵盖一整天的场景吗?前 2 天、10 天等
  • @user3614760 。 . .这些确实涵盖了任何天数,所以我不明白你的评论。
猜你喜欢
  • 2015-10-31
  • 1970-01-01
  • 2021-12-04
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多