0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PostgreSQL interval型の数値だけ欲しい

Posted at

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」で割れば日にちに単位を直すことが出来る。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?