MySQLで現在の年から動的なテーブル名を作成する方法(例:2019)
「2019」のように現在の年をテーブル名として作成したい場合は、PREPAREステートメントを使用します。本記事では、現在の年から動的にテーブル名を生成し、データをコピーする手順を具体的なサンプルコードとともに解説します。
1. 元となるテーブルを作成する
まず、データのコピー元となるサンプルテーブルを作成します。
mysql> create table DemoTable1959
(
UserName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)2. テーブルにレコードを挿入する
INSERTコマンドを使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable1959 values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1959 values('David');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1959 values('Bob');
Query OK, 1 row affected (0.00 sec)3. 挿入したレコードを確認する
SELECTステートメントで、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1959;
実行すると、以下のような結果が出力されます。
+----------+ | UserName | +----------+ | Chris | | David | | Bob | +----------+ 3 rows in set (0.00 sec)
4. 現在の年から動的なテーブル名を作成する
ここが本題です。現在の年(この例では2019年)をテーブル名として動的に生成するには、CONCAT関数とDATE_FORMAT関数を組み合わせてSQL文を文字列として組み立て、PREPARE/EXECUTEで実行します。
mysql> set @dynamicQuery = CONCAT('create table `', date_format(curdate(),'%Y'), '` as select UserName from DemoTable1959');
Query OK, 0 rows affected (0.00 sec)
mysql> prepare st from @dynamicQuery;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute st;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0処理のポイント
date_format(curdate(), '%Y'):現在の日付から「年」を4桁の数値として取得します。CONCAT():取得した年をバッククォートで囲み、CREATE TABLE文全体を文字列として連結します。PREPARE / EXECUTE:MySQLではDDL文(CREATE TABLEなど)を直接変数に入れて実行できないため、プリペアドステートメント経由で実行します。
5. 作成されたテーブルを確認する
SELECTステートメントで、新しく作成されたテーブルの中身を確認します。現在の年が2019年なので、テーブル名は「2019」になります。
mysql> select * from `2019`;
実行結果は以下の通りです。元テーブルのデータが正しくコピーされていることがわかります。
+----------+ | UserName | +----------+ | Chris | | David | | Bob | +----------+ 3 rows in set (0.00 sec)
まとめ
MySQLで現在の年をテーブル名として使用したい場合、テーブル名を直接変数にすることはできないため、CONCAT関数でSQL文を文字列として構築し、PREPARE/EXECUTEで実行するのが定番の手法です。ログテーブルや年度別の集計テーブルなど、年ごとにテーブルを分割して管理したいケースで非常に役立つテクニックなので、ぜひ活用してください。
-
MySQLで既存のテーブルから特定の行を選択して新しいテーブルを作成する方法
すでに作成済みのテーブルを元に新しいテーブルを作成するには、CREATE TABLE AS SELECT文(CTAS)を使用します。この構文では、SELECT句とWHERE句を組み合わせることで、条件に一致するレコードだけを格納したテーブルを簡単に複製できます。ここでは、実際のコード例をもとに手順を詳しく解説します。 手順1:元となるテーブルを作成する まずはサンプルとして、Id、FirstName、LastName、Ageの4つのカラムを持つテーブルを定義します。 mysql> create table DemoTable1318 -> ( -> Id int, -&
-
MySQLで「10/12/2010」形式の日付から特定の年を抽出してテーブルのレコードを更新する方法
日付が「10/12/2010」のような文字列形式(日/月/年)で保存されている場合、STR_TO_DATE()関数で日付に変換し、YEAR()関数と組み合わせることで、特定の年に該当するレコードだけを更新できます。基本構文UPDATE yourTableName SET yourColumnName1 = yourValue1 WHERE YEAR(STR_TO_DATE(yourColumnName2, %d/%m/%Y)) = yourValue2;サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1924