2017-04-07 311 views
0

假設我給了兩個日期,如果差別是一個月,那麼它應該顯示爲30天。甚至幾個月也需要轉換成天 我已經試過了年齡(日期,現在()::時間戳沒有時區)但它是給予月 - 日 - 年的格式。例如:10日24日13:57:40.5265。但我需要以下方法。 例如,如果有兩個月的差異,那麼我需要輸出爲60天。如何計算postgres sql查詢中兩個日期之間的日期。

+0

'CURRENT_DATE - ÿ our_timestamp_column :: date' –

+0

你到目前爲止嘗試過什麼?你能顯示一些代碼嗎? –

+0

但是二月和三月同一天的差別是28或29天? 3月和4月同一天的差別是31天。 即使你提取的天數你不會得到30天的每個月到每個月的比較。 –

回答

1

不要使用日期/時間算術的age()函數。它只有returns "symbolic" results(這對於人類表示來說足夠好,但對於日期/時間計算幾乎沒有意義;與標準差相比)。

標準difference operator (-)回報以天爲結果都datetimestamptimestamp with time zone(前者返回天爲int,後兩者的回報以天爲interval S):

從以天爲間隔,你可以提取物天的extract()功能:

select current_date - '2017-01-01', 
     extract(day from now()::timestamp - '2017-01-01 00:00:00'), 
     extract(day from now()   - '2017-01-01 00:00:00Z'); 

http://rextester.com/RBTO71933

+0

'age()'返回'interval'而不是「符號」結果。這是一種數據類型,可以很容易地用於計算,絕對不是**「無意義的」 –

+0

@a_horse_with_no_name [來自文檔](https://www.postgresql.org/docs/current/static/functions -datetime.html)*年齡(時間戳,時間戳):減去參數,產生一個使用年和月的「符號」結果,而不僅僅是幾天*,從技術上說它的類型是'interval',但是給定它的(函數的)語義和一般的'時間間隔'正當性規則,它並不意味着用於日期/時間算術(可能在某些邊緣情況下)。 – pozs

0

這兩者都會給出結果。

select make_interval(days => ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer)::text; 

select format('%1$s days', ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer); 
+0

謝謝你正在工作正常 – suresh

相關問題