【问题标题】:How to cast a time interval into a decimal value in postgresql?如何在postgresql中将时间间隔转换为十进制值?
【发布时间】:2017-08-27 13:10:05
【问题描述】:

运行此查询时:

SELECT
  start_date,
  end_date,
  end_date-start_date as timediff

FROM content_events

我得到一张这样的表:

+---------------------+---------------------+-----------------+
| start_date          | end_date            | timediff        |
+---------------------+---------------------+-----------------+
| 2017-03-23 23:00:00 | 2017-04-01 22:00:00 | 8 days 23:00:00 |
+---------------------+---------------------+-----------------+

但我想得到这样的东西:

+---------------------+---------------------+-----------------+
| start_date          | end_date            | timediff        |
+---------------------+---------------------+-----------------+
| 2017-03-23 23:00:00 | 2017-04-01 22:00:00 | 8,96            |
+---------------------+---------------------+-----------------+

请注意,我只需要将时差作为带有两位小数的数值。

我使用的是 PostgreSQL 8.0.2。

非常感谢!

【问题讨论】:

  • SELECT ..., extract(epoch from end_date-start_date)/(24*60*60) as timediff FROM content_events; Doc
  • 你确定版本吗?..
  • @VaoTsun 是的,这就是我得到的:i686-pc-linux-gnu 上的 PostgreSQL 8.0.2 版本,由 GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2- 6.fc3)、红移 1.0.1232
  • 啊,红移...
  • 嗨 @Abelisto 刚刚意识到计算在某些日期无法正常工作 screencast.com/t/Kjg9eord5Lco 正如您在该屏幕截图中看到的那样,使用 start_date 时:'02/04/ 17 22:00' 和 end_date: '20/05/17 22:00',差异不正确。它返回 78 天。 注意: Days Left 列是 end_datecurrent_date 之间的差异

标签: sql date casting amazon-redshift


【解决方案1】:

这个select 语句工作正常:

(date_part(epoch,end_date)::float - date_part(epoch,start_date)::float)/(24*60*60) as timediff

或者这个也是:

(extract(epoch from end_date)::float - extract(epoch from start_date)::float)/(24*60*60) as timediff

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2014-03-13
    • 1970-01-01
    • 2016-05-09
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多