2011-10-04 123 views
0

我有这个疑问,那就是一直给我一些问题,它看起来像这样:如何计算两个日期的持续时间?

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函数没有返回整数的选项,如果将其设置为返回文本,然后如果尝试使用显式强制转换将该字符串转换为整数(如::integer),则会出错因为一个整数在那里不能有冒号。
那么,有没有办法让to_char返回一个以某种方式表示日期的整数,然后减去这两个值? 如果不是,我该怎么做才能做到这一点?

回答

1

只是彼此相减2种date类型应该在几天内返回它们的差异。

SET planned_duration = (due_date - start_date) 

不知道为什么to_char正在使用,除非我在这里丢失的东西。

+0

但是你不能像这样将间隔转换为int。看我的文章/手册。 –

+0

哈哈,哦,我,我不知道这是如此简单,谢谢。 – zermy

+0

@ErwinBrandstetter - 你介意解释为什么?我刚刚测试'select('2011-10-04':: date - '2011-08-04':: date):: int'正确返回了'61' –

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) 
+0

哇,谢谢一堆。 – zermy