PostgreSQL DATE_TRUNC() 関数
Shihab Sikder
2023年6月20日
-
PostgreSQL での
DATE_TRUNC()
関数の使用 -
"ミリ秒"
Postgre の精度DATE_TRUNC()
-
Postgre の
"second"
精度DATE_TRUNC()
-
Postgre の
"minute"
精度DATE_TRUNC()
-
Postgre の
"hour"
精度DATE_TRUNC()
-
Postgre の
"day"
精度DATE_TRUNC()
-
Postgres のクエリで
DATE_TRUNC()
を使用する
この記事では、コード スニペットを使用して Postgres の DATE_TRUNC()
関数について説明します。
PostgreSQL での DATE_TRUNC()
関数の使用
Postgres では、特定のタイムスタンプを特定のレベルの精度に切り詰めたり丸めたりすることができます。 たとえば、最も近い分、時間、日、月などに切り捨てることができます。
Postgres では、DATE_TRUNC()
には次の間隔があります。
Century
Day
Decade
Hour
Minute
Microsecond
Millisecond
Second
Month
Quarter
Week
Year
これが現在のタイムスタンプです。 結果を確認するために、さまざまな間隔で使用します。
postgres=# SELECT NOW();
now
-------------------------------
2022-04-29 17:30:48.256668+06
(1 row)
"ミリ秒"
Postgre の精度 DATE_TRUNC()
DATE_TRUNC()
の精度としてミリ秒
を使用します。
postgres=# SELECT DATE_TRUNC('millisecond', TIMESTAMP '2022-04-29 17:30:48.256668');
date_trunc
-------------------------
2022-04-29 17:30:48.256
(1 row)
ミリ秒は 256668
でした。 次に、256
に切り捨てられました。
Postgre の "second"
精度 DATE_TRUNC()
ここでは、DATE_TRUNC()
の精度として "second"
を使用します。
postgres=# SELECT DATE_TRUNC('second', TIMESTAMP '2022-04-29 17:30:48.256668');
date_trunc
---------------------
2022-04-29 17:30:48
(1 row)
小数部分が切り上げられて値が切り上げられていることがわかります。
Postgre の "minute"
精度 DATE_TRUNC()
DATE_TRUNC()
の精度として分
を使用しました。
postgres=# SELECT DATE_TRUNC('minute', TIMESTAMP '2022-04-29 17:30:48.256668');
date_trunc
---------------------
2022-04-29 17:30:00
(1 row)
分は30:48
でした。 DATE_TRUNC(),
を使用すると、30:00
になりました。
Postgre の "hour"
精度 DATE_TRUNC()
DATE_TRUNC()
の精度として "hour"
を使用しましょう。
postgres=# SELECT DATE_TRUNC('hour', TIMESTAMP '2022-04-29 17:30:48.256668');
date_trunc
---------------------
2022-04-29 17:00:00
(1 row)
17:30:48.256668
と 17:00:00
の違いがわかります。
Postgre の "day"
精度 DATE_TRUNC()
DATE_TRUNC()
の精度として "日"
を使用します。
postgres=# SELECT DATE_TRUNC('day', TIMESTAMP '2022-04-29 17:30:48.256668');
date_trunc
---------------------
2022-04-29 00:00:00
(1 row)
時刻が00:00:00
になっていることがわかります。 その日を締めくくった。
Postgres のクエリで DATE_TRUNC()
を使用する
ホテルのチェックインで次のMOCK_DATA
を持ってみましょう。
postgres=# SELECT * from MOCK_DATA;
id | first_name | last_name | email | gender | check_in
-----+-------------+--------------+----------------------------------+-------------+------------
1 | Agustin | Bawdon | abawdon0@umn.edu | Male | 2016-05-11
2 | Maximilian | Ber | mber1@artisteer.com | Male | 2013-03-08
3 | Randy | Kline | rkline2@pcworld.com | Bigender | 2019-01-01
4 | Bonnibelle | Mazillius | bmazillius3@is.gd | Female | 2011-07-06
5 | Rolland | Hollidge | rhollidge4@seesaa.net | Male | 2009-04-30
6 | Sandro | Hubbert | shubbert5@nature.com | Male | 2019-11-26
7 | Collin | La Torre | clatorre6@google.de | Male | 2016-02-12
8 | Joleen | Jerram | jjerram7@instagram.com | Female | 2015-05-23
-- More --
毎年のチェックインをカウントしたいと考えています。
SELECT
date_trunc('year', check_in) year_no,
COUNT(id) Customers
FROM
MOCK_DATA
GROUP BY
year_no
ORDER BY
year_no;
出力:
year_no | customers
------------------------+-----------
2008-01-01 00:00:00+06 | 17
2009-01-01 00:00:00+06 | 20
2010-01-01 00:00:00+06 | 15
2011-01-01 00:00:00+06 | 20
2012-01-01 00:00:00+06 | 19
2013-01-01 00:00:00+06 | 18
2014-01-01 00:00:00+06 | 13
2015-01-01 00:00:00+06 | 24
2016-01-01 00:00:00+06 | 18
2017-01-01 00:00:00+06 | 13
2018-01-01 00:00:00+06 | 23
2019-01-01 00:00:00+06 | 17
2020-01-01 00:00:00+06 | 16
2021-01-01 00:00:00+06 | 12
2022-01-01 00:00:00+06 | 5
(15 rows)
DATE_TRUNC()
の詳細については、公式ドキュメント を参照してください。 moccaroo を使用して、サンプル データベースを生成できます。
著者: Shihab Sikder