コマンド道場

$ man extract

EXTRACT

日付・時刻関数

日付や時刻から、年・月・日などの一部分を取り出す。

呼び出しの形

EXTRACT(要素 FROM 日付)
EXTRACT(YEAR FROM 日付)
EXTRACT(MONTH FROM 日付)

つまずきやすいところ

  • 月だけで GROUP BY すると年をまたいだ月が混ざります。年と一緒に区切ってください。

  • DOW の番号の始まりは製品によって違います(PostgreSQL は 0 が日曜)。

  • PostgreSQL の EXTRACTnumeric を返します。整数として扱いたいときは型変換するか、比較する相手の型に注意してください。

実行例

結果は実際に流したものです。同じ 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
nentsukikensu
2025112
2025123
202612
202623

4

年も一緒に区切らないと、別の年の同じ月がまとまってしまいます。

曜日を数値で取り出す
SELECT juchu_on, EXTRACT(DOW FROM juchu_on) AS youbi_bangou FROM juchu ORDER BY juchu_on
juchu_onyoubi_bangou
2025-11-053
2025-11-182
2025-12-022
2025-12-092
2025-12-243
2026-01-073
2026-01-213
2026-02-032

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

製品ごとの対応表(根拠つき)を見る

次に読む

関係する関数

根拠にした一次情報