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

MySQLのWHERE句で期日と現在日付のレコードをチェックする条件の書き方

期日(duedate)と現在の日付を比較してレコードの妥当性をチェックしたい場合、MySQLでは IF() 関数 を使うと便利です。NULL値や過去の日付が含まれるデータを自動的に判定し、「Wrong Date」などのラベルを表示させることができます。

まずは、動作を確認するためのテーブルを作成しましょう。

テーブル作成例

mysql> create table demo89
    -> (
    -> duedate date
    -> );
Query OK, 0 rows affected (0.78 sec)

次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。ここでは、有効な日付・NULL・過去の日付を混ぜて登録しています。

データ挿入例

mysql> insert into demo89 values('2020-01-10');
Query OK, 1 row affected (0.55 sec)

mysql> insert into demo89 values(null);
Query OK, 1 row affected (0.13 sec)

mysql> insert into demo89 values('2020-11-29');
Query OK, 1 row affected (0.15 sec)

mysql> insert into demo89 values('2019-11-29');
Query OK, 1 row affected (0.09 sec)

SELECT文でテーブル内のレコードを表示して、登録内容を確認します。

レコード確認

mysql> select *from demo89;

上記のクエリを実行すると、次のような結果が出力されます。

出力結果

+------------+
| duedate    |
+------------+
| 2020-01-10 |
| NULL       |
| 2020-11-29 |
| 2019-11-29 |
+------------+
4 rows in set (0.00 sec)

それでは、期日と現在の日付を比較するクエリを見てみましょう。IF() 関数 の中に「duedate IS NULL」または「duedate < CURDATE()」という条件を指定することで、NULL値や現在の日付より前のレコードを検出できます。

条件チェックのクエリ例

mysql> select if (duedate is null
    -> or duedate < curdate(),'Wrong Date',duedate) as Result
    -> from demo89;

このクエリを実行すると、次のような結果が出力されます。

出力結果

+------------+
| Result     |
+------------+
| Wrong Date |
| Wrong Date |
| 2020-11-29 |
| Wrong Date |
+------------+
4 rows in set (0.00 sec)

実行結果から分かるように、NULL値のレコードや CURDATE()(現在の日付) よりも前の日付を持つレコードには「Wrong Date」が表示され、有効な日付である「2020-11-29」だけがそのまま出力されています。このようにIF()関数とCURDATE()を組み合わせれば、WHERE句での絞り込みだけでなく、SELECT時の判定表示によって期日の妥当性を簡単にチェックすることが可能です。

  1. MySQLで現在の日付と翌日のレコードを条件に特定の列を抽出する方法

    MySQLでは、CURDATE()関数を使うことで、現在の日付やその翌日に該当するレコードを簡単に抽出できます。この記事では、実際のサンプルを使いながら、現在の日付と翌日の出荷日を持つレコードから特定の列を選択して取得する方法を解説します。 1. 現在の日付を確認する まず、curdate()関数で現在の日付を取得してみましょう。 mysql> select curdate(); 実行すると、以下のような結果が表示されます。 +------------+ | curdate() | +------------+ | 2019-12-15 | +------------+ 1 row

  2. MySQLでSELECTフィールドごとに条件を適用する方法:WHERE句の代わりにCASE式を使う

    MySQLでSELECTフィールドごとに条件を適用するには MySQLでは、WHERE句を使わなくても、SELECT文の中でCASE式を利用することで、フィールドごとに個別の条件を設定できます。ここでは、具体的なサンプルコードとともにその方法を解説します。 1. テーブルを作成する まず、CREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable1988     (     Value1 int,