我正在尝试使类似以下的查询工作:

SELECT EXTRACT(DAY FROM INTERVAL to_date - from_date) FROM histories;

在引用的表中,to_date 和 from_date 是没有时区的时间戳类型。像这样的常规查询
SELECT to_date - from_date FROM histories;

给我间隔结果,例如“65 天 04:58:09.99”。但是在第一个查询中使用这个表达式会给我一个错误:类型间隔的输入语法无效。我尝试了各种引用,甚至在没有运气的情况下嵌套查询。这能做到吗?

最佳答案



这毫无意义。 INTERVAL xxx 是区间文字的语法。所以 INTERVAL from_date 是一个语法错误,因为 from_date 不是文字。如果您的代码确实看起来更像 INTERVAL '2012-02-01' 那么那将会失败,因为 2012-02-01 不是 INTERVAL 的有效语法。

这里的 INTERVAL 关键字只是噪音。我怀疑你误解了文档中的一个例子。删除它,表达式会很好。

我猜你想得到两个日期之间的天数,表示为 timestamptimestamptz

如果是这样,要么将两者都转换到日期:

SELECT to_date::date - from_date::date FROM histories;

或获取间隔,然后提取天组件:
SELECT extract(day from to_date - from_date) FROM histories;

关于postgresql - 从计算的间隔中提取天数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21440363/

10-13 02:07