MySQLで現在日時がJoiningDateとRelievingDateの間にあるレコードを抽出する方法
はじめに
MySQLでは、BETWEEN演算子を使うことで、入社日(JoiningDate)と退社日(RelievingDate)の間に現在の日時が含まれるレコードを簡単に検索できます。現在の日付と時刻を取得するには、NOW()関数を使用します。
この記事では、実際にテーブルを作成し、データを挿入して、目的のクエリを実行するまでの手順を順番に解説します。
サンプルテーブルの作成
まず、以下のようにテーブルを作成します。
mysql> create table DemoTable771 ( Joiningdate datetime, Relievingdate datetime ); Query OK, 0 rows affected (1.15 sec)
DATETIME型のカラムを2つ持つシンプルなテーブルです。次に、INSERT文でサンプルデータを挿入します。
テストデータの挿入
insertコマンドを使用して、いくつかのレコードを登録します。
mysql> insert into DemoTable771 values('2016-01-21','2016-09-23');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable771 values('2019-01-21','2019-09-23');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable771 values('2017-04-01','2018-12-31');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable771 values('2019-04-01','2019-12-31');
Query OK, 1 row affected (0.25 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable771;
実行すると、以下のような結果が出力されます。
+---------------------+---------------------+ | Joiningdate | Relievingdate | +---------------------+---------------------+ | 2016-01-21 00:00:00 | 2016-09-23 00:00:00 | | 2019-01-21 00:00:00 | 2019-09-23 00:00:00 | | 2017-04-01 00:00:00 | 2018-12-31 00:00:00 | | 2019-04-01 00:00:00 | 2019-12-31 00:00:00 | +---------------------+---------------------+ 4 rows in set (0.00 sec)
現在日時が期間内にあるレコードを抽出するクエリ
ここが本題です。現在の日付と時刻(NOW())がJoiningdateとRelievingdateの間に含まれるレコードを取得するには、以下のクエリを実行します。
mysql> select *from DemoTable771 where NOW() between Joiningdate and Relievingdate;
実行結果は以下の通りです。
+---------------------+---------------------+ | Joiningdate | Relievingdate | +---------------------+---------------------+ | 2019-01-21 00:00:00 | 2019-09-23 00:00:00 | | 2019-04-01 00:00:00 | 2019-12-31 00:00:00 | +---------------------+---------------------+ 2 rows in set (0.07 sec)
解説
BETWEEN演算子は「以上・以下」の範囲指定を行うため、境界値(開始日・終了日のちょうど同じ日時)も条件に含まれます。上記の例では、クエリ実行時点の日時が2019年1月〜9月および2019年4月〜12月の範囲内であるため、該当する2件のレコードだけが返されています。
なお、BETWEENは両端を含むため、終了日を含めたくない場合は >= と < を組み合わせる方法もあります。
select *from DemoTable771 where NOW() >= Joiningdate and NOW() < Relievingdate;
用途に応じて使い分けることで、より柔軟な期間検索が可能になります。
-
MySQLでSELECT *を使って現在の日付のレコードを検索する方法
現在の日付を取得するには CURDATE() 関数を使用します。さらに、STR_TO_DATE() 関数で文字列を日付型に変換し、現在の日付と比較することで、該当するレコードを抽出できます。以下に基本的な構文を示します。基本構文select *from テーブル名 where str_to_date(カラム名,書式指定子)=curdate();それでは、現在の日付が「27/10/2019」である場合を例に、具体的な手順を見ていきましょう。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> (
-
【MySQL】日付レコードから曜日を減算し、曜日名とともに結果を表示する方法
はじめにMySQLで保存された日付レコードから、その週の開始日(月曜日)を計算して減算し、曜日名とともに結果を表示したい場合があります。このような処理には DATE_FORMAT() 関数を使用します。SUBDATE() と WEEKDAY() を組み合わせることで、各日付が属する週の月曜日の日付を「Mon 19 Oct」のような形式で取得できます。以下、具体的な手順をサンプルコードとともに解説します。1. テーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable1820 ( AdmissionDate