MySQLで日付型カラムから今日と明日のレコードを抽出して表示する方法
MySQLでは、日付型(DATE)のカラムに対して「今日」と「明日」の日付に該当するレコードだけを簡単に抽出できます。本記事では、サンプルテーブルを作成し、CURDATE() 関数と INTERVAL を組み合わせたクエリを使って、今日および明日の日付データを表示する手順を解説します。
1. サンプルテーブルの作成
まず、日付を格納するテーブルを作成します。
mysql> create table DemoTable
(
AdmissionDate date
);
Query OK, 0 rows affected (0.87 sec)
AdmissionDate という DATE 型のカラムを1つだけ持つシンプルなテーブルを用意しました。
2. テストデータの挿入
次に、INSERT 文を使っていくつかのレコードを登録します。
mysql> insert into DemoTable values('2019-08-24');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('2019-08-25');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('2019-08-20');
Query OK, 1 row affected (0.24 sec)
3. 登録されたレコードの確認
SELECT 文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+---------------+ | AdmissionDate | +---------------+ | 2019-08-24 | | 2019-08-25 | | 2019-08-20 | +---------------+ 3 rows in set (0.00 sec)
3件のレコードが正しく登録されていることが確認できました。ここで、「2019-08-24」を今日、「2019-08-25」を明日の日付と仮定します。
4. 今日と明日のレコードを抽出するクエリ
今日と明日の日付に一致するレコードのみを表示するには、以下のようなクエリを実行します。
mysql> select *from DemoTable where AdmissionDate IN(curdate(),curdate() + interval 1 day);
実行結果:
+---------------+ | AdmissionDate | +---------------+ | 2019-08-24 | | 2019-08-25 | +---------------+ 2 rows in set (0.00 sec)
今日(CURDATE())と明日(CURDATE() + 1日)に該当する2件のレコードだけが取得できました。
クエリのポイント解説
- CURDATE():現在の日付(今日)を「YYYY-MM-DD」形式で返す関数です。時刻は含まれません。
- curdate() + interval 1 day:今日の日付に1日を加算し、明日の日付を求めています。「interval 1 day」の部分の数値や単位(week、month など)を変えれば、さまざまな期間に応用できます。
- IN 演算子:複数の候補値のいずれかに一致するレコードをまとめて抽出できます。OR 条件を並べるよりも簡潔に記述できるのが利点です。
代替方法:BETWEEN を使った書き方
同様の結果は BETWEEN を使っても得られます。
mysql> select *from DemoTable where AdmissionDate BETWEEN curdate() AND curdate() + interval 1 day;
どちらの書き方でも結果は同じですが、対象日が2つだけなら IN、連続した期間を扱うなら BETWEEN の使用が読みやすくおすすめです。
このように、MySQLでは CURDATE() と INTERVAL を組み合わせることで、システム日付を基準とした柔軟な日付検索が実現できます。予約管理やイベント告知など、当日・翌日のデータを扱う場面でぜひ活用してください。
-
MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法
MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 ro
-
MySQLで文字列や数値が混在するカラムから特定のレコードを取得する方法
文字列・数値・特殊文字が混在するカラムから特定のレコードを取得したい場合は、ORDER BY CAST() を活用すると便利です。この記事では、SUBSTRING() 関数と組み合わせて、「指定した文字列で始まるレコードの中から、数値部分が最も大きいもの」を抽出する方法を、実際のSQL例とともにわかりやすく解説します。 サンプルテーブルの作成 まず、CREATE TABLE文でテーブルを作成します。 mysql> create table DemoTable2006 ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Us