PostgreSQL DATE_TRUNC() 関数
    
    Shihab Sikder
    2023年6月20日
    
    PostgreSQL
    PostgreSQL Function
    
- 
          
            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 を使用して、サンプル データベースを生成できます。
        チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
    
著者: Shihab Sikder
    
