PostgreSQL interval型の数値だけ欲しい
interval型では数値と単位が融合して出力されるので単純に数値だけ欲しい場合に困った。
先に自分のメモ的にも使用すると思うので、どうしたかを書いておきます。
SELECT EXTRACT(EPOCH FROM (CAST('2021-07-12' AS TIMESTAMP) - CAST('2021-06-01' AS TIMESTAMP))) / (60 * 60 * 24) AS elapsed_days
EXTRACT関数
EXTRACT(field FROM source)
EXTRACT関数を利用すると、date/timeから年や時間、月、曜日を取得できる。
EXTRACT関数のfieldにEPOCHを与えると、、、
date型とtimestamp型の値の場合は、1970-01-01 00:00:00からの秒数を返します(負の数の場合もあり)。
interval型の値の場合は、インターバルの秒の合計を返す。
SELECT EXTRACT(MONTH FROM (CAST('2021-07-12' AS TIMESTAMP)))
/* 7 */
SELECT EXTRACT(EPOCH FROM (CAST('2021-07-12' AS TIMESTAMP)))
/* 1626048000 */
SELECT EXTRACT(EPOCH FROM (CAST('2021-07-12' AS TIMESTAMP) - CAST('2021-07-11' AS TIMESTAMP)))
/* 86400 */
結論
interval型にEXTRACT(EPOCH FROM source) を使用するとインターバルの秒の合計を返すので、一日の秒数である「60 * 60 * 24」で割れば日にちに単位を直すことが出来る。
参考