MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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を書くことができます。

  1. 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

  2. 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 ->