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」と記述します。また、過去にさかのぼりたい場合はマイナス値を指定してください。この手法は、有効期限の一括更新や、テストデータの日付調整など、時刻を崩したくない場面で特に便利です。
-
MySQLのGROUP BY句で日付をグループ化してレコードを表示する方法
MySQLで日付をグループ化する基本 MySQLで日付データをグループ化してレコードを表示するには、GROUP BY句を使用します。この記事では、顧客ごとに出荷日の最小値と最大値を取得する例を通じて、GROUP BY句の使い方を詳しく解説します。 1. サンプルテーブルの作成 まず、顧客名と出荷日を格納するテーブルを作成します。 mysql> create table DemoTable2002 ( CustomerName varchar(20), CustomerShippingDate datetime ); Query OK, 0 rows affected (
-
MySQLでASC順にレコードのリストのみを表示する方法
MySQLでレコードを特定の順序で表示したい場合、条件を設定した上でORDER BY句を使用する必要があります。このようなケースでは、ORDER BY CASEステートメントが非常に便利です。本記事では、特定のレコードを優先的に並べ替えつつ、残りのレコードを昇順(ASC)で表示する方法を解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable2039 -> ( -> Name varchar(20) -> );Query OK, 0 rows affected (0.62 sec)