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

MySQLで日付の最後の1秒(23:59:59)を取得する方法

```html

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)を簡単に取得できます。期限日時や締切時刻の計算などでよく使われるテクニックなので、覚えておくと便利です。

  1. MySQLでvarchar型の日付リストから最大の日付を取得する方法

    MySQLでは、varchar型として保存された日付文字列をそのままMAX()関数で比較すると、正しい結果が得られないことがあります。文字列としての比較は辞書順に行われるためです。このような場合は、STR_TO_DATE()関数を使って文字列を日付型に変換してから最大値を取得します。ここでは、「Sunday, 11 August 2019」のような形式のvarchar型日付データから、最大の日付を取得する手順を解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成します。AdmissionDateカラムはvarchar(100)型として定義します。mysql> create

  2. 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」を持つ