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

MySQLで今日の日付に一致するレコードを取得する方法(CURDATE関数の活用)

MySQLでdatetime型のカラムから「今日の日付」と完全に一致するレコードを取得したい場合、CURDATE()関数を使って現在の日付と比較するのが基本のアプローチです。本記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、具体的な手順をわかりやすく解説します。

1. 検証用テーブルの作成

まずは、日付情報を格納するためのテーブルを作成しましょう。ここではRegistrationLastDateというdatetime型のカラムを持つテーブルを用意します。

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

以降の説明では、現在の日付が以下であることを前提とします。

2019-09-03

2. サンプルデータの挿入

次に、INSERT文を使ってテスト用のレコードをいくつか登録します。時間情報を持つレコードと、日付のみのレコードを混ぜて挿入している点に注目してください。

mysql> insert into DemoTable values('2019-08-01');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-09-03 9:50:56');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2019-09-03');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-09-02');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-09-02 9:50:00');
Query OK, 1 row affected (0.10 sec)

3. 登録されたデータの確認

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

mysql> select *from DemoTable;

実行結果は次のとおりです。datetime型のため、日付のみを指定して挿入したレコードには時刻として「00:00:00」が自動的に設定されていることがわかります。

+----------------------+
| RegistrationLastDate |
+----------------------+
| 2019-08-01 00:00:00  |
| 2019-09-03 09:50:56  |
| 2019-09-03 00:00:00  |
| 2019-09-02 00:00:00  |
| 2019-09-02 09:50:00  |
+----------------------+
5 rows in set (0.00 sec)

4. 今日の日付に一致するレコードを取得するクエリ

いよいよ本題です。今日の日付に一致するレコードを抽出するには、DATE()関数でdatetime型の値から日付部分だけを取り出し、それをCURDATE()関数が返す現在の日付と比較します。

mysql> select *from DemoTable where DATE(RegistrationLastDate)=curdate();

実行結果は以下のとおりです。「2019-09-03」に該当する2件のレコードが正しく取得できました。時刻が異なるレコード(09:50:56)も、日付部分が一致していれば抽出対象になっている点がポイントです。

+----------------------+
| RegistrationLastDate |
+----------------------+
| 2019-09-03 09:50:56  |
| 2019-09-03 00:00:00  |
+----------------------+
2 rows in set (0.01 sec)

補足:パフォーマンスに関する注意点

WHERE DATE(カラム名) = CURDATE()のようにカラムに関数を適用すると、インデックスが利用されず全表走査になる可能性があります。大量のデータを扱うテーブルでは、代わりに範囲指定を使う方法が推奨されます。

mysql> select *from DemoTable
    -> where RegistrationLastDate >= curdate()
    ->   and RegistrationLastDate < curdate() + interval 1 day;

この書き方なら、カラム側に関数を使わないためインデックスが有効に機能し、大規模なテーブルでも高速に検索できます。用途に応じて両者の使い分けを検討するとよいでしょう。

  1. MySQLで現在の日付(CURDATE())に一致する特定の日付のレコードを更新する方法

    MySQLでは、CURDATE()関数を使うことで、現在の日付に一致するレコードだけを抽出し、UPDATE文で効率的に値を変更できます。本記事では、実際のサンプルを通じてその手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、デモ用のテーブルを作成します。ここでは「金額(Amount)」と「期日(DueDate)」を持つシンプルなテーブルを用意しました。 mysql> create table DemoTable1822      (      Amount int,      Du

  2. MySQLで特定の日付のレコード数をカウントする方法

    MySQLでは、COUNT(*)関数とWHERE句を組み合わせることで、特定の日付に該当するレコードの件数を簡単に取得できます。この記事では、サンプルテーブルを作成し、指定した日付のデータ件数をカウントする手順を順番に解説します。 1. サンプルテーブルの作成 まず、日付型(DATE)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1946     (     ShippingDate date     ); Quer