2011-10-04 122 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