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

【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日など)が新しい月に含まれない場合は、月末の日付に丸められる点にも留意しておきましょう。

  1. MySQLでCOALESCE()を使ってNULLのフィールドのみを更新する方法

    はじめに MySQLでは、NULLが含まれるレコードに対して、他のカラムの値を使って特定の1つのフィールドだけを更新したいケースがあります。そんなときに便利なのが COALESCE() 関数です。 COALESCE()は、引数の中から最初にNULLではない値を返す関数です。これをUPDATE文と組み合わせることで、NULLの場合だけ別のカラムの値で置き換えることができます。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1805     (    &

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