我正在嘗試使用 PostgresSQL 上的 SQL 計算多月期間兩個日期之間的時間比例。
我的公式很簡單
select iot.*,
(iot.DATE_FIN - iot.DATE_DEBUT)::double precision / NULLIF( extract (day from iot.DATE_FIN - date_trunc('month', iot.DATE_DEBUT)), 0::double precision) as prorata
from (
select DATE '2020-05-01' as DATE_DEBUT, DATE '2020-05-31' as DATE_FIN
) iot
給我預期的結果 => 1
但是當我切換到游行時
select iot.*,
(iot.DATE_FIN - iot.DATE_DEBUT)::double precision / NULLIF(extract (day from iot.DATE_FIN - date_trunc('month', iot.DATE_DEBUT)), 0::double precision) as prorata
from (
select DATE '2020-03-01' as DATE_DEBUT, DATE '2020-03-31' as DATE_FIN
) iot
我得到了一個奇怪的結果 1.0344827586206897
有任何想法嗎?
uj5u.com熱心網友回復:
這是由 引起的date_trunc('month',此函式回傳一個帶有時區的日期,但您的整個微積分不處理時區。
如果您強制 Postgres 忽略時區,它應該可以作業:
select iot.*,
(iot.DATE_FIN - iot.DATE_DEBUT)::double precision / NULLIF(extract (day from iot.DATE_FIN - date_trunc('month', iot.DATE_DEBUT)::timestamp without time zone), 0::double precision) as prorata
from (
select DATE '2020-03-01' as DATE_DEBUT, DATE '2020-03-31' as DATE_FIN
) iot
我只是date_trunc用::timestamp without time zone.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327555.html
標籤:sql PostgreSQL 日期
上一篇:通過排序和過濾洗掉重復項
