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

MySQLで時刻はそのままに日付(年)だけを変更する方法

MySQLでは、INTERVAL演算子を使うことで、時刻部分はそのまま維持したまま、日付部分だけを変更できます。既存のレコードを更新するため、UPDATE文と組み合わせてINTERVALで新しい値を設定します。

テーブルを作成する

まず、例としてテーブルを作成してみましょう。

mysql> create table DemoTable
(
    DueDate datetime
);
Query OK, 0 rows affected (0.56 sec)

レコードを挿入する

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

mysql> insert into DemoTable values('2017-08-12 10:30:45');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2015-09-21 12:00:00');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('2018-12-31 11:45:56');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2016-01-02 01:23:04');
Query OK, 1 row affected (0.14 sec)

レコードを確認する

SELECT文で、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

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

+-----------------------+
| DueDate               |
+-----------------------+
| 2017-08-12 10:30:45   |
| 2015-09-21 12:00:00   |
| 2018-12-31 11:45:56   |
| 2016-01-02 01:23:04   |
+-----------------------+
4 rows in set (0.00 sec)

時刻を変更せずに日付だけを更新するクエリ

以下のクエリを実行すると、時刻の値はそのままに、すべての日付(年)だけが変更されます。

mysql> update DemoTable
    set DueDate=DueDate+interval 1 year;
Query OK, 4 rows affected (0.16 sec)
Rows matched : 4  Changed : 4  Warnings : 0

このように「列名 + INTERVAL n 単位」という形式を使うことで、DATETIME型の値に対して指定した期間を加算できます。ここでは「interval 1 year」としているため、各レコードの年が1年ずつ加算され、時・分・秒の情報はまったく変わっていません。

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

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

mysql> select *from DemoTable;

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

+-----------------------+
| DueDate               |
+-----------------------+
| 2018-08-12 10:30:45   |
| 2016-09-21 12:00:00   |
| 2019-12-31 11:45:56   |
| 2017-01-02 01:23:04   |
+-----------------------+
4 rows in set (0.00 sec)

出力を見ると、すべてのレコードの年が1年進んでいる一方で、時刻部分(10:30:45など)は元のまま維持されていることがわかります。

補足:さまざまな単位の指定

INTERVALでは「year」以外にも、「month」「day」「hour」など様々な単位を指定できます。たとえば日付だけを1ヶ月進めたい場合は「set DueDate=DueDate + interval 1 month」と記述します。また、過去にさかのぼりたい場合はマイナス値を指定してください。この手法は、有効期限の一括更新や、テストデータの日付調整など、時刻を崩したくない場面で特に便利です。

  1. MySQLのGROUP BY句で日付をグループ化してレコードを表示する方法

    MySQLで日付をグループ化する基本 MySQLで日付データをグループ化してレコードを表示するには、GROUP BY句を使用します。この記事では、顧客ごとに出荷日の最小値と最大値を取得する例を通じて、GROUP BY句の使い方を詳しく解説します。 1. サンプルテーブルの作成 まず、顧客名と出荷日を格納するテーブルを作成します。 mysql> create table DemoTable2002 ( CustomerName varchar(20), CustomerShippingDate datetime ); Query OK, 0 rows affected (

  2. MySQLでASC順にレコードのリストのみを表示する方法

    MySQLでレコードを特定の順序で表示したい場合、条件を設定した上でORDER BY句を使用する必要があります。このようなケースでは、ORDER BY CASEステートメントが非常に便利です。本記事では、特定のレコードを優先的に並べ替えつつ、残りのレコードを昇順(ASC)で表示する方法を解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable2039 -> ( -> Name varchar(20) -> );Query OK, 0 rows affected (0.62 sec)