MySQLで日付から年と月を抽出する3つの方法を徹底解説
MySQLでは、DATE型やDATETIME型のカラムから「年」や「月」の情報を抽出する場面がよくあります。例えば、設立年月の一覧表示や、年度別・月別の集計などがその代表例です。
本記事では、サンプルテーブル「collegedetail」(大学の設立日 estb カラムを含む)を使いながら、年と月を抽出する代表的な3つの方法をわかりやすく解説します。
方法1:EXTRACT()関数を使う
年と月をまとめて1つの値として取得したい場合は、EXTRACT()関数が便利です。引数に「YEAR_MONTH」を指定することで、年と月を連結した数値(例:201005=2010年5月)として抽出できます。
mysql> Select EXTRACT(YEAR_MONTH From estb) from collegedetail; +-------------------------------+ | EXTRACT(YEAR_MONTH From estb) | +-------------------------------+ | 201005 | | 199510 | | 199409 | | 200107 | | 201007 | +-------------------------------+ 5 rows in set (0.00 sec)
この形式は「YYYYMM」という6桁の数値になるため、文字列比較やソート処理にも使いやすいのが特徴です。なお、EXTRACT()は「YEAR」や「MONTH」単体での抽出にも対応しています。
方法2:DATE_FORMAT()関数を使う
DATE_FORMAT()関数を使うと、年と月をまとめて取得できるだけでなく、それぞれ単独で抽出したり、出力フォーマットを自由に整えたりすることも可能です。フォーマット指定子の主な種類は以下の通りです。
- %Y:4桁の年(例:2010)
- %m:2桁の月(例:05)
- %M:英語の月名(例:May)
まずは、年と月をまとめて「YYYY MM」形式で取得する例です。
mysql> Select DATE_FORMAT(estb, '%Y %m') from collegedetail; +----------------------------+ | DATE_FORMAT(estb, '%Y %m') | +----------------------------+ | 2010 05 | | 1995 10 | | 1994 09 | | 2001 07 | | 2010 07 | +----------------------------+ 5 rows in set (0.00 sec)
次に、年だけを抽出する例です。
mysql> Select DATE_FORMAT(estb, '%Y') from Collegedetail; +-------------------------+ | DATE_FORMAT(estb, '%Y') | +-------------------------+ | 2010 | | 1995 | | 1994 | | 2001 | | 2010 | +-------------------------+ 5 rows in set (0.00 sec)
続いて、月を2桁の数字で抽出する例です。
mysql> Select DATE_FORMAT(estb, '%m') from Collegedetail; +-------------------------+ | DATE_FORMAT(estb, '%m') | +-------------------------+ | 05 | | 10 | | 09 | | 07 | | 07 | +-------------------------+ 5 rows in set (0.00 sec)
さらに、「%M」を指定すれば、月を英語名(May、Octoberなど)で表示することもできます。
mysql> Select DATE_FORMAT(estb, '%M') from Collegedetail; +-------------------------+ | DATE_FORMAT(estb, '%M') | +-------------------------+ | May | | October | | September | | July | | July | +-------------------------+ 5 rows in set (0.10 sec)
このようにDATE_FORMAT()は柔軟性が高く、画面表示用に整形した日付が必要な場合に最適です。
方法3:YEAR()関数とMONTH()関数を組み合わせる
年と月を別々のカラムとして同時に取得したい場合は、YEAR()関数とMONTH()関数を組み合わせるのがシンプルで効果的です。AS句を使えば、結果の列見出しも見やすくできます。
mysql> Select YEAR(estb) AS 'Year', MONTH(estb) As 'MONTH' From collegedetail; +------+-------+ | Year | MONTH | +------+-------+ | 2010 | 5 | | 1995 | 10 | | 1994 | 9 | | 2001 | 7 | | 2010 | 7 | +------+-------+ 5 rows in set (0.00 sec)
数値として返されるため、GROUP BY句と組み合わせて「年別」「年月別」の集計クエリを作成する際にもよく使われる方法です。
まとめ:用途に応じた使い分けのポイント
- EXTRACT(YEAR_MONTH ...):年月を1つの数値として扱いたい場合(ソート・比較に便利)
- DATE_FORMAT():表示形式を自由に整えたい場合(月名表示なども可能)
- YEAR() / MONTH():年と月を別々の数値カラムとして取得したい場合(集計処理に便利)
それぞれの特徴を理解して、目的に合った関数を選択することで、より効率的で読みやすいSQLを書くことができます。
-
PHPのdate_parse()関数でタイムスタンプから日・月・年を抽出する方法
date_parse()関数でタイムスタンプを解析するPHPでタイムスタンプ(日時文字列)から日・月・年を抽出するには、date_parse() 関数を使用します。この関数は日時文字列を解析し、年・月・日・時・分・秒などの情報を連想配列として返してくれます。基本構文は以下の通りです。print_r(date_parse(anyTimeStampValue));サンプルコード具体的なタイムスタンプ値を解析するPHPコードは以下のようになります。$yourTimeStampValue="2019-02-04 12:56:50"; print_r(date_parse($your
-
MySQLで時刻(TIME型)から「分」を抽出する方法
MySQLでは、extract()関数とcast()を組み合わせることで、時刻データから分だけを簡単に抽出できます。基本構文以下が基本となる構文です。select extract(minute from cast(yourColumnName as time)) as anyAliasName from yourTableName;ポイントは、対象のカラムをcast()でtime型に変換してから、extract()のminute指定で分を取り出す点です。サンプルテーブルの作成まずは動作を確認するためのテーブルを作成しましょう。mysql> create table demo15 ->