如何计算两个日期的持续时间?

时间:2011-10-04 20:40:28

标签: sql postgresql date

我有这个问题,这给了我一些问题,看起来像这样:

UPDATE servicecontracts 
   SET planned_duration = (to_char(due_date) - to_char(start_date) + 1)
      ,actual_duration =''
      ,progress = NULL 
 WHERE servicecontractsid = '263'

经过一些研究,我设法弄清楚这个查询试图做什么,它只是试图通过减去截止日期和开始日期来找到计划的持续时间。为什么,这是试图通过减去字符串来做到这一点,我不知道。此外,to_char函数需要第二个参数。

所以,无论如何,现在我需要找到planned_duration,但我该怎么做。根据Postgresql文档,to_char函数没有返回整数的选项,如果将其设置为返回文本,然后尝试使用显式强制转换将字符串转换为整数,如{{ 1}},你得到一个错误,因为整数不能有冒号 那么,::integer是否有办法返回一个以某种方式表示日期的整数,然后减去这两个? 如果没有,我该怎么办呢?

2 个答案:

答案 0 :(得分:2)

我引用了精细的手册here

SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08');

结果:982384720.12

但是对于计算间隔,有更简单的方法:

SELECT (due_date - start_date)

答案 1 :(得分:1)

只需相互减去两个date类型就可以返回它们之间的差异。

SET planned_duration = (due_date - start_date)

不确定为什么to_char被使用,除非我在这里遗漏了什么。