我正在尝试使类似以下的查询工作:
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
关键字只是噪音。我怀疑你误解了文档中的一个例子。删除它,表达式会很好。
我猜你想得到两个日期之间的天数,表示为 timestamp
或 timestamptz
。
如果是这样,要么将两者都转换到日期:
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/