如何使用postgres将间隔转换为若干小时?

agn*_*nul 138 postgresql datetime intervals

说我有一个间隔

4 days 10:00:00
Run Code Online (Sandbox Code Playgroud)

在postgres.如何将其转换为若干小时(在这种情况下为106?)是否有功能或者我应该咬紧牙关做类似的事情

extract(days, my_interval) * 24 + extract(hours, my_interval)
Run Code Online (Sandbox Code Playgroud)

Mag*_*der 265

可能最简单的方法是:

SELECT EXTRACT(epoch FROM my_interval)/3600
Run Code Online (Sandbox Code Playgroud)

  • 提取时代?噢,我百万年后不会想到这一点. (54认同)
  • 警告:简单地提取epoch隐含地假定一个月= 30天和一年= 365.25天. (12认同)
  • 如果间隔包含分钟和/或秒,则可以将结果置于或转换为整数 (6认同)
  • SELECT EXTRACT(epoch FROM my_interval / 3600)(间隔具有本机“除整数”支持,结果是间隔,提取结果是整数,而不是浮点数)。所以。自动播送/完成。 (3认同)
  • @Teddy 我们能用它做什么?如何避免这个问题并获得真实的纪元数? (2认同)
  • 刚刚发现这个方法有问题。它不考虑闰年,因此如果您进行像 10 年这样的长间隔,它总是会少几天。 (2认同)

Puj*_*ava 16

如果你想要整数,即天数:

SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
Run Code Online (Sandbox Code Playgroud)

  • 警告:简单地提取epoch隐含地假定一个月= 30天和一年= 365.25天. (3认同)

小智 6

要获得最简单的天数:

SELECT EXTRACT(DAY FROM NOW() - '2014-08-02 08:10:56');
Run Code Online (Sandbox Code Playgroud)

据我所知,它将返回相同的:

SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int;
Run Code Online (Sandbox Code Playgroud)

  • 如果你的间隔是"1个月0天",那么使用`extract(day from ...)`会得到'0`作为结果. (18认同)