$ man date-trunc
DATE_TRUNC
日付・時刻関数日付や時刻を、指定した単位で切り捨てる。月初・週初にそろえるのに使う。
呼び出しの形
DATE_TRUNC(単位, 日付)
DATE_TRUNC('month', 日付)
DATE_TRUNC('year', 日付)つまずきやすいところ
PostgreSQL 固有の関数です。標準 SQL ではないので、移植には書き換えが要ります。
戻り値は
timestampです。日付として扱いたいときは::dateで変換してください。'week'の週の始まりは月曜です。日曜始まりにしたい場合は自分でずらす必要があります。
実行例
結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。
SELECT DATE_TRUNC('month', juchu_on)::date AS tsuki, COUNT(*) AS kensu FROM juchu GROUP BY 1 ORDER BY 1| tsuki | kensu |
|---|---|
| 2025-11-01 | 2 |
| 2025-12-01 | 3 |
| 2026-01-01 | 2 |
| 2026-02-01 | 3 |
4 行
年月が残るので、年をまたいでも混ざりません。並べ替えもそのまま時系列になります。
SELECT juchu_on, DATE_TRUNC('year', juchu_on)::date AS nen_hajime, DATE_TRUNC('month', juchu_on)::date AS tsuki_hajime FROM juchu ORDER BY juchu_on| juchu_on | nen_hajime | tsuki_hajime |
|---|---|---|
| 2025-11-05 | 2025-01-01 | 2025-11-01 |
| 2025-11-18 | 2025-01-01 | 2025-11-01 |
| 2025-12-02 | 2025-01-01 | 2025-12-01 |
| 2025-12-09 | 2025-01-01 | 2025-12-01 |
| 2025-12-24 | 2025-01-01 | 2025-12-01 |
| 2026-01-07 | 2026-01-01 | 2026-01-01 |
| 2026-01-21 | 2026-01-01 | 2026-01-01 |
| 2026-02-03 | 2026-01-01 | 2026-02-01 |
10 行(うち 8 行を表示)
説明
DATE_TRUNC は日付を指定した単位で切り捨てます。'month' を指定すればその月の 1 日に、'year' ならその年の 1 月 1 日になります。
月別の集計では EXTRACT より扱いやすい場面が多くあります。EXTRACT(MONTH ...) は月の数字しか返さないので年をまたぐと混ざりますが、DATE_TRUNC('month', ...) は年月がそのまま残るので、そのまま GROUP BY に使えて並べ替えも自然な時系列順になります。
⚠️ DATE_TRUNC は PostgreSQL の関数で、標準 SQL ではありません。MySQL では DATE_FORMAT、SQL Server では DATEFROMPARTS などで書き換えることになります。
次に読む
使い方を順に読むなら
根拠にした一次情報
- PostgreSQL 18 マニュアル: 日付/時刻関数と演算子(2026-09-02 確認)