MySQLで日付の最後の1秒(23:59:59)を取得する方法
MySQLである日付の「その日の最後の1秒」、つまり 23:59:59 を取得したい場合は、INTERVAL 演算子を使うのが簡単です。この記事では、実際にテーブルを作成し、データを挿入したうえで、日付の最後の1秒を取得するクエリを実行するまでの手順を紹介します。
1. テーブルを作成する
まず、DATETIME型のカラムを持つテーブルを作成します。
mysql> create table DemoTable
-> (
-> JoiningDatetime datetime,
-> DueDatetime datetime
-> );
Query OK, 0 rows affected (0.55 sec)
2. レコードを挿入する
INSERT文を使って、いくつかのレコードを追加します。
mysql> insert into DemoTable(JoiningDatetime) values('2019-11-03 12:34:54');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(JoiningDatetime) values('2019-10-04 12:34:54');
Query OK, 1 row affected (0.13 sec)
3. テーブルの内容を確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。まだ DueDatetime は NULL になっています。
+---------------------+-------------+ | JoiningDatetime | DueDatetime | +---------------------+-------------+ | 2019-11-03 12:34:54 | NULL | | 2019-10-04 12:34:54 | NULL | +---------------------+-------------+ 2 rows in set (0.00 sec)
4. 日付の最後の1秒を取得するクエリ
ここが本題です。次のUPDATE文では、JoiningDatetime の日付部分に対して「+1日 −1秒」という計算を行うことで、その日の最後の1秒(23:59:59)を求めています。
mysql> update DemoTable
-> set DueDatetime=DATE(JoiningDatetime) + INTERVAL 1 DAY - INTERVAL 1 SECOND;
Query OK, 2 rows affected (0.19 sec)
Rows matched: 2 Changed: 2 Warnings: 0
仕組みの解説
DATE(JoiningDatetime):時刻を切り捨て、日付部分のみ(例:2019-11-03 00:00:00)を取得します。+ INTERVAL 1 DAY:翌日の 00:00:00 に進めます。- INTERVAL 1 SECOND:1秒戻すことで、元の日付の 23:59:59 になります。
5. 更新後のテーブルを確認する
もう一度テーブルの内容を確認してみましょう。
mysql> select *from DemoTable;
実行結果:
+---------------------+---------------------+ | JoiningDatetime | DueDatetime | +---------------------+---------------------+ | 2019-11-03 12:34:54 | 2019-11-03 23:59:59 | | 2019-10-04 12:34:54 | 2019-10-04 23:59:59 | +---------------------+---------------------+ 2 rows in set (0.00 sec)
このように、DATE() + INTERVAL 1 DAY - INTERVAL 1 SECOND の組み合わせを使えば、任意の日付の最後の1秒(23:59:59)を簡単に取得できます。期限日時や締切時刻の計算などでよく使われるテクニックなので、覚えておくと便利です。
-
MySQLでvarchar型の日付リストから最大の日付を取得する方法
MySQLでは、varchar型として保存された日付文字列をそのままMAX()関数で比較すると、正しい結果が得られないことがあります。文字列としての比較は辞書順に行われるためです。このような場合は、STR_TO_DATE()関数を使って文字列を日付型に変換してから最大値を取得します。ここでは、「Sunday, 11 August 2019」のような形式のvarchar型日付データから、最大の日付を取得する手順を解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成します。AdmissionDateカラムはvarchar(100)型として定義します。mysql> create
-
MySQLでDATETIME型から日付のみを抽出する方法
MySQLのDATETIME型カラムから日付部分だけを取り出したい場合、DATE_FORMAT()関数と書式指定子を組み合わせるのが便利です。使用する主な書式指定子は以下の通りです。%d … 日(01〜31)%m … 月(01〜12)%Y … 年(4桁)それでは、実際にサンプルテーブルを作成して確認してみましょう。1. テーブルの作成mysql> create table DemoTable ( AdmissionDate datetime ); Query OK, 0 rows affected (0.52 sec)DATETIME型のカラム「AdmissionDate」を持つ