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

MySQLで月番号から月名を取得する方法|MONTHNAME関数の使い方を徹底解説

MySQLのMONTHNAME()関数で月番号を月名に変換する

MySQLでは、MONTHNAME()関数を使うことで、月番号(1〜12)から「January」「February」などの月名を簡単に取得できます。ただし、この関数は通常、日付型の値を引数として受け取るため、数値だけの月番号を扱う場合はSTR_TO_DATE()関数と組み合わせるのが定番の手法です。

基本の構文

SELECT MONTHNAME(STR_TO_DATE(カラム名, '%m')) AS 別名 FROM テーブル名;

STR_TO_DATE()関数にフォーマット指定子「%m」を渡すことで、月番号が日付値に変換され、さらにMONTHNAME()関数によって月名へと変換されます。

実際に試してみよう

ステップ1:サンプルテーブルを作成する

まずは月番号を格納するためのテーブルを作成します。

mysql> CREATE TABLE MonthDemo
-> (
-> MonthNum int
-> );
Query OK, 0 rows affected (0.87 sec)

ステップ2:レコードを挿入する

INSERT文を使って、1〜12の月番号を登録します。複数行をまとめて挿入することも可能です。

mysql> INSERT INTO MonthDemo VALUES(1);
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO MonthDemo VALUES(2);
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO MonthDemo VALUES(3);
Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO MonthDemo VALUES(4);
Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO MonthDemo VALUES(5);
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO MonthDemo VALUES(6);
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO MonthDemo VALUES(7);
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO MonthDemo VALUES(8);
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO MonthDemo VALUES(9);
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO MonthDemo VALUES(10);
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO MonthDemo VALUES(11);
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO MonthDemo VALUES(12);
Query OK, 1 row affected (0.15 sec)

ステップ3:登録したデータを確認する

SELECT文で全レコードを表示してみましょう。

mysql> SELECT * FROM MonthDemo;

実行結果は以下の通りです。

+------------+
| MonthNum |
+------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
+------------+
12 rows in set (0.00 sec)

ステップ4:月名を表示するクエリを実行する

ここで本題のクエリです。MONTHNAME()とSTR_TO_DATE()を組み合わせて、月番号を月名に変換します。

mysql> SELECT MONTHNAME(STR_TO_DATE(MonthNum, '%m')) AS MonthName FROM MonthDemo;

実行すると、各月番号に対応した月名が出力されます。

+-----------+
| MonthName |
+-----------+
| January |
| February |
| March |
| April |
| May |
| June |
| July |
| August |
| September |
| October |
| November |
| December |
+-----------+
12 rows in set (0.00 sec)

補足:月名の表示言語を変更したい場合

MONTHNAME()関数が返す月名は、システム変数「lc_time_names」の設定に依存します。デフォルトは「en_US」(英語表記)ですが、日本語表記に変更したい場合は以下のように設定します。

SET lc_time_names = 'ja_JP';

この設定を行うと、「January」の代わりに「1月」「2月」といった形式で結果を取得できるようになります。多言語対応のアプリケーションを開発する際に役立つテクニックなので、覚えておくと便利です。

  1. MySQLストアドプロシージャ内で現在のデータベース名を取得する方法

    MySQLで現在接続しているデータベース名を取得したい場合は、DATABASE() 関数を使用します。まず、基本的な構文を見てみましょう。基本構文select database();この関数は、現在選択されているデータベースの名前を文字列として返します。データベースが選択されていない場合は NULL を返します。ストアドプロシージャへの実装次に、上記の構文を実際にストアドプロシージャの中に組み込んでみましょう。以下の手順で作成できます。mysql> delimiter // mysql> create procedure get_procedure_database_name()

  2. MySQLでテーブルから特定の行を抽出するクエリの書き方

    MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),