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

MySQLで条件を指定して日付の期間(間・前・後)を抽出する方法

MySQLでは、WHERE句にAND条件とOR条件を組み合わせることで、「ある日付より前」かつ「別のある日付より後、またはNULL」といった複雑な条件付きの日付抽出が可能になります。退職日(relieving_date)が未設定のレコードも含めて抽出したい場合などに特に便利です。

基本の構文

条件付きで日付を選択する場合の基本的な構文は以下の通りです。

SELECT * FROM テーブル名
WHERE
カラム名1 < 値1 AND
(カラム名2 > 値2 OR カラム名2 IS NULL);

この構文のポイントは、OR条件部分を括弧()で囲むことです。これにより、AND条件との優先順位が明確になり、意図した通りの結果が得られます。

サンプルテーブルの作成

まず、入社日(joining_date)と退職日(relieving_date)を持つテーブルを作成してみましょう。

mysql> create table demo35
-> (
-> id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> joining_date date,
-> relieving_date date
-> );
Query OK, 0 rows affected (3.88 sec)

レコードの挿入

次に、INSERT文を使ってサンプルデータを挿入します。

mysql> insert into demo35(joining_date, relieving_date) values('2020-01-10', '2020-07-11');
Query OK, 1 row affected (0.15 sec)
mysql> insert into demo35(joining_date, relieving_date) values('2020-05-07', '2020-12-08');
Query OK, 1 row affected (0.17 sec)
mysql> insert into demo35(joining_date, relieving_date) values('2020-04-11', '2020-09-18');
Query OK, 1 row affected (0.14 sec)
mysql> insert into demo35(joining_date, relieving_date) values('2020-03-12', '2020-10-01');
Query OK, 1 row affected (0.13 sec)

登録データの確認

SELECT文でテーブルの中身を表示して確認しましょう。

mysql> select *from demo35;

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

+----+--------------+----------------+
| id | joining_date | relieving_date |
+----+--------------+----------------+
|  1 | 2020-01-10   | 2020-07-11     |
|  2 | 2020-05-07   | 2020-12-08     |
|  3 | 2020-04-11   | 2020-09-18     |
|  4 | 2020-03-12   | 2020-10-01     |
+----+--------------+----------------+
4 rows in set (0.00 sec)

条件付きで日付を抽出するクエリ

それでは実際に、「2020年5月11日より前に入社し、かつ2020年8月10日より後に退職している(または退職日がNULL)」という条件でレコードを抽出してみます。

mysql> select *from demo35
-> where
-> joining_date < '2020-05-11' AND
-> (relieving_date > '2020-08-10' OR relieving_date is null);

このクエリを実行すると、以下の出力が得られます。

+----+--------------+----------------+
| id | joining_date | relieving_date |
+----+--------------+----------------+
|  2 | 2020-05-07   | 2020-12-08     |
|  3 | 2020-04-11   | 2020-09-18     |
|  4 | 2020-03-12   | 2020-10-01     |
+----+--------------+----------------+
3 rows in set (0.00 sec)


結果の解説

出力結果を見ると、id 2〜4の3件が該当しています。id 1のレコードは入社日は条件を満たしていますが、退職日が「2020-07-11」であり「2020-08-10」より後ではないため除外されました。

このように、AND演算子で複数の条件を連結し、OR演算子とIS NULLを括弧で組み合わせることで、柔軟な日付条件でのデータ抽出が実現できます。在籍期間による絞り込みや、退職日が未確度の現役社員を含めた検索など、実務でも幅広く活用できるテクニックなので、ぜひマスターしておきましょう。

  1. MySQLで再帰的なSELECTクエリを実行する方法【初心者向けに具体例つきで解説】

    MySQLでは、ユーザー定義変数(セッション変数)を活用することで、再帰的なSELECTクエリを実現できます。本記事では、実際にテーブルを作成し、データを挿入したうえで、再帰的なSELECTの具体的な書き方を順を追って解説します。 1. サンプルテーブルの作成 まず、再帰的なSELECTを試すためのサンプルテーブルを作成します。テーブルの作成にはCREATEコマンドを使用します。 mysql> CREATE table tblSelectDemo - > ( - > id int, - > name varchar(100) - > );

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected