$ man extract
EXTRACT
日付・時刻関数日付や時刻から、年・月・日などの一部分を取り出す。
呼び出しの形
EXTRACT(要素 FROM 日付) EXTRACT(YEAR FROM 日付) EXTRACT(MONTH FROM 日付)
つまずきやすいところ
月だけで
GROUP BYすると年をまたいだ月が混ざります。年と一緒に区切ってください。DOWの番号の始まりは製品によって違います(PostgreSQL は 0 が日曜)。PostgreSQL の
EXTRACTはnumericを返します。整数として扱いたいときは型変換するか、比較する相手の型に注意してください。
実行例
結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。
SELECT EXTRACT(YEAR FROM juchu_on) AS nen, EXTRACT(MONTH FROM juchu_on) AS tsuki, COUNT(*) AS kensu FROM juchu GROUP BY 1, 2 ORDER BY 1, 2
| nen | tsuki | kensu |
|---|---|---|
| 2025 | 11 | 2 |
| 2025 | 12 | 3 |
| 2026 | 1 | 2 |
| 2026 | 2 | 3 |
4 行
年も一緒に区切らないと、別の年の同じ月がまとまってしまいます。
SELECT juchu_on, EXTRACT(DOW FROM juchu_on) AS youbi_bangou FROM juchu ORDER BY juchu_on
| juchu_on | youbi_bangou |
|---|---|
| 2025-11-05 | 3 |
| 2025-11-18 | 2 |
| 2025-12-02 | 2 |
| 2025-12-09 | 2 |
| 2025-12-24 | 3 |
| 2026-01-07 | 3 |
| 2026-01-21 | 3 |
| 2026-02-03 | 2 |
10 行(うち 8 行を表示)
0 が日曜、6 が土曜です。
説明
EXTRACT は日付から一部分を数値として取り出します。FROM を使う独特の書き方ですが、標準 SQL の構文です。
よく使う要素は YEAR MONTH DAY HOUR DOW(曜日)QUARTER(四半期)です。月別に集計したいときは GROUP BY にそのまま書けます。
⚠️ ただし、年をまたぐと月だけでは区別できません。2025 年 12 月と 2026 年 12 月がひとまとめになってしまうので、年と月の両方で区切るか、月初に丸める DATE_TRUNC を使ってください。
⚠️ DOW(曜日)は 0 が日曜です。1 が月曜の製品もあるので、移植するときは必ず確かめてください。
ほかの製品でも通るか
この書き方が使えない製品があります そのまま使える: PostgreSQL / MySQL / MariaDB / Oracle Database
- SQLite では使えません(EXTRACT(日付の一部を取り出す))
- SQL Server では使えません(EXTRACT(日付の一部を取り出す))
未確認: IBM Db2
次に読む
使い方を順に読むなら
関係する関数
根拠にした一次情報
- PostgreSQL 18 マニュアル: 日付/時刻関数と演算子(2026-09-02 確認)