从计算的间隔中提取天数

Jul*_*lie 6 postgresql

我正在尝试让如下查询起作用:

SELECT EXTRACT(DAY FROM INTERVAL to_date - from_date) FROM histories;
Run Code Online (Sandbox Code Playgroud)

在引用的表中,to_date和from_date是没有时区的时间戳类型。常规查询如

SELECT to_date - from_date FROM histories;
Run Code Online (Sandbox Code Playgroud)

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

Cra*_*ger 8

从历史记录中选择 EXTRACT(DAY FROM INTERVAL to_date - from_date);

这毫无意义。INTERVAL xxx是区间文字的语法。INTERVAL from_date语法错误也是如此,因为from_date它不是文字。如果您的代码确实看起来更像INTERVAL '2012-02-01'那么那将会失败,因为2012-02-01这对于INTERVAL.

这里的关键词INTERVAL只是噪音。我怀疑您误解了文档中的示例。把它去掉,表情就可以了。

我猜您正在尝试获取表示为timestamp或 的两个日期之间的天数timestamptz

如果是这样,请将两者都投射到日期:

SELECT to_date::date - from_date::date FROM histories;
Run Code Online (Sandbox Code Playgroud)

或获取间隔,然后提取日期部分:

SELECT extract(day from to_date - from_date) FROM histories;
Run Code Online (Sandbox Code Playgroud)