【MySQL】日付の月だけを更新するクエリの書き方
日付の月のみを更新するMySQLクエリ
日付型カラムの中で「月」の部分だけを更新したい場合、MONTH()関数とDATE_ADD()関数を組み合わせることで実現できます。本記事では、実際にテーブルを作成し、具体的な手順とともに解説します。
テーブルの作成
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable861(AdmissionDate date);
Query OK, 0 rows affected (1.22 sec)
レコードの挿入
INSERT文を使用して、いくつかのレコードを追加します。
mysql> insert into DemoTable861 values('2019-01-21');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable861 values('2018-01-01');
Query OK, 1 row affected (0.49 sec)
mysql> insert into DemoTable861 values('2016-01-02');
Query OK, 1 row affected (1.27 sec)
mysql> insert into DemoTable861 values('2018-01-14');
Query OK, 1 row affected (0.47 sec)テーブルの内容を確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from DemoTable861;
実行結果は以下の通りです。
+---------------+
| AdmissionDate |
+---------------+
| 2019-01-21 |
| 2018-01-01 |
| 2016-01-02 |
| 2018-01-14 |
+---------------+
4 rows in set (0.00 sec)
月のみを更新するクエリ
以下が、月だけを更新するクエリの例です。WHERE句でMONTH()関数により1月(01)のレコードを絞り込み、DATE_ADD()関数で1ヶ月前へシフトさせています。
mysql> update DemoTable861
set AdmissionDate=date_add(AdmissionDate,Interval -1 month)
where month(AdmissionDate)=01;
Query OK, 4 rows affected (0.42 sec)
Rows matched : 4 Changed : 4 Warnings : 0
更新後の確認
もう一度テーブルのレコードを確認してみましょう。
mysql> select *from DemoTable861;
実行結果は以下の通りです。
+---------------+
| AdmissionDate |
+---------------+
| 2018-12-21 |
| 2017-12-01 |
| 2015-12-02 |
| 2017-12-14 |
+---------------+
4 rows in set (0.00 sec)
実行結果のポイント
上記の出力を見ると、すべてのレコードで1月から12月へ月が移動していることがわかります。「Interval -1 month」と指定することで、1ヶ月前の日付に更新されました。
ここで注意すべき点として、DATE_ADD()は日付全体に対して演算を行うため、年またぎの場合は年も自動的に調整されます(例:2019-01-21 → 2018-12-21)。日付部分は元の値が維持されますが、存在しない日(31日など)が新しい月に含まれない場合は、月末の日付に丸められる点にも留意しておきましょう。
-
MySQLでCOALESCE()を使ってNULLのフィールドのみを更新する方法
はじめに MySQLでは、NULLが含まれるレコードに対して、他のカラムの値を使って特定の1つのフィールドだけを更新したいケースがあります。そんなときに便利なのが COALESCE() 関数です。 COALESCE()は、引数の中から最初にNULLではない値を返す関数です。これをUPDATE文と組み合わせることで、NULLの場合だけ別のカラムの値で置き換えることができます。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1805 ( &
-
【MySQL】DATE_FORMAT()でタイムスタンプから月名のみを取得する方法
MySQLでTIMESTAMPから月名のみを取得する方法 MySQLで日時データ(TIMESTAMP)から「月名」だけを取り出したい場合は、DATE_FORMAT()関数を使用します。フォーマット指定子に%Mを指定することで、「January」「December」のような完全な英語の月名を簡単に取得できます。 1. サンプルテーブルを作成する まず、TIMESTAMP型のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1999 ( ArrivalDate timestamp ); Query OK, 0 rows affected