我有这个问题,这给了我一些问题,看起来像这样:
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
是否有办法返回一个以某种方式表示日期的整数,然后减去这两个?
如果没有,我该怎么办呢?
答案 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
被使用,除非我在这里遗漏了什么。