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

MySQLのINTERVALを使って日付フィールドに1日を追加する方法

MySQLでは、DATE_ADD()関数とINTERVALを組み合わせることで、日付や日時フィールドに簡単に1日を追加できます。この記事では、実際にテーブルを作成し、INTERVAL 1 DAYを使って日付フィールドの値を更新する手順を解説します。

1. テーブルを作成する

まず、日付型(DATE)のカラムを持つテーブルを作成します。

mysql> create table DemoTable
-> (
-> DueDate date
->);
Query OK, 0 rows affected (2.11 sec)

2. レコードを挿入する

INSERTコマンドを使って、テーブルにいくつかのレコードを追加します。

mysql> insert into DemoTable values('2019-01-21');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2018-12-31');
Query OK, 1 row affected (0.47 sec)
mysql> insert into DemoTable values('2018-12-30');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values('2017-02-26');
Query OK, 1 row affected (0.47 sec)

3. テーブルの内容を確認する

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

mysql> select *from DemoTable;

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

+------------+
| DueDate |
+------------+
| 2019-01-21 |
| 2018-12-31 |
| 2018-12-30 |
| 2017-02-26 |
+------------+
4 rows in set (0.00 sec)

4. INTERVALを使って1日を追加する

ここが本題です。UPDATE文とDATE_ADD()関数、そしてINTERVAL 1 DAYを組み合わせることで、すべての日付フィールドに1日を加算できます。

mysql> update DemoTable
-> set DueDate=date_add(DueDate,interval 1 day);
Query OK, 4 rows affected (0.21 sec)
Rows matched: 4 Changed: 4 Warnings: 0

5. 更新後のレコードを確認する

もう一度テーブルの内容を確認してみましょう。

mysql> select *from DemoTable;

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

+------------+
| DueDate |
+------------+
| 2019-01-22 |
| 2019-01-01 |
| 2018-12-31 |
| 2017-02-27 |
+------------+
4 rows in set (0.00 sec)

ポイントのまとめ

上記の出力を見ると、すべての日付が1日ずつ進んでいることがわかります。注目すべき点として、「2018-12-31」は「2019-01-01」に正しく更新されており、月や年をまたぐ場合でもDATE_ADD()関数が自動的に適切な日付を計算してくれます。うるう年の2月末なども同様に正しく処理されるため、日付の加算・減算にはINTERVALを使うのが最も安全で確実な方法です。

また、逆に日付を減らしたい場合はDATE_SUB(DueDate, INTERVAL 1 DAY)を使用します。「DAY」以外にも「MONTH」「YEAR」「HOUR」「MINUTE」などの単位も指定できるので、さまざまな場面で活用できます。

  1. MySQLでGROUP BYのように特定の1行だけ更新する方法|ORDER BYとLIMITを活用したUPDATE文の書き方

    MySQLでは、UPDATE文の中でGROUP BYを直接使用することができません。しかし、「同じ値を持つ複数のレコードの中から、最初の1行だけを更新したい」というケースは実際の開発でよく発生します。 そんなときに役立つのが、ORDER BYとLIMITを組み合わせたUPDATE文です。この記事では、サンプルテーブルを使いながら、その具体的な手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、従業員情報を格納するテーブル「DemoTable2018」を作成します。テーブルには、自動採番される主キー「EmployeeId」、従業員名「EmployeeName」、給与「Emp

  2. MySQLのGROUP_CONCATで複数行の値を1つのフィールドにまとめてリストとして取得する方法

    はじめにMySQLでは、複数の行に分かれている値を1つのフィールドに連結したリストとして取得したい場面がよくあります。たとえば、科目ごとに受講している学生名をカンマ区切りでまとめて表示したい場合などです。このような場合は、集約関数のGROUP_CONCAT()を使用することで簡単に実現できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながらGROUP_CONCAT()の使い方を順を追って解説します。サンプルテーブルの作成まず、科目名(SubjectName)と学生名(StudentName)を持つテーブルを作成します。mysql> create table DemoTab