#author("2023-12-16T20:07:22+09:00","","") #navi(../) * 開始日と終了日を条件に期間内に該当するレコードを取得するSQL [#jaa6425f] WHERE句の条件としての開始日(時)と終了日(時)がパラメータとして渡され、 この期間と重なるレコードを抽出するSQLになります。~ テーブルも開始日(時) の start_date, 終了日(時)の end_date カラムが存在します。 で、いつも「どう書くんだっけ?」となるので記事にしました(苦笑)。 #contents * 条件に指定する日が範囲内にあるかどうかを確認するSQL [#x9bd2060] 範囲内にあるかどうか確認する日付を check_start_date と check_end_date とし、~ レコードの開始日は start_date、終了日は end_date とします。~ ** 答え [#kc25d5b8] 先に答えを記します。 WHERE start_date <= check_end_date AND end_date >= checK_start_date となります。 ** 実際に試してみる [#c628a5ed] 以下のテーブルを作成しデータを投入し試してみます。~ データベースは PostgreSQL を使って動作確認しました。 -作成したテーブル CREATE TABLE t1 (id int, start_date date, end_date date); #br -INSERTしたデータ INSERT INTO t1 VALUES ( 1,'2023-01-01','2023-01-31'), ( 2,'2023-02-01','2023-02-28'), ( 3,'2023-03-01','2023-03-31'), ( 4,'2023-04-01','2023-04-30'), ( 5,'2023-05-01','2023-05-31'), ( 6,'2023-06-01','2023-06-30'), ( 7,'2023-07-01','2023-07-31'), ( 8,'2023-08-01','2023-08-31'), ( 9,'2023-09-01','2023-09-30'), (10,'2023-10-01','2023-10-31'), (11,'2023-11-01','2023-11-30'), (12,'2023-12-01','2023-12-31'); #br -投入データの確認 sakuradb=> SELECT * FROM T1; id | start_date | end_date ----+------------+------------ 1 | 2023-01-01 | 2023-01-31 2 | 2023-02-01 | 2023-02-28 3 | 2023-03-01 | 2023-03-31 4 | 2023-04-01 | 2023-04-30 5 | 2023-05-01 | 2023-05-31 6 | 2023-06-01 | 2023-06-30 7 | 2023-07-01 | 2023-07-31 8 | 2023-08-01 | 2023-08-31 9 | 2023-09-01 | 2023-09-30 10 | 2023-10-01 | 2023-10-31 11 | 2023-11-01 | 2023-11-30 12 | 2023-12-01 | 2023-12-31 (12 行) ** 開始日と終了日を条件に実行してみる [#t5136271] 以下のように範囲となる開始日と終了日を指定してSQLを実行した結果です。 SELECT * FROM t1 WHERE start_date <= '2023-01-01' AND end_date >= '2022-01-01'; id | start_date | end_date ----+------------+------------ 1 | 2023-01-01 | 2023-01-31 (1 行) SELECT * FROM t1 WHERE start_date <= '2023-08-01' AND end_date >= '2023-02-02'; id | start_date | end_date ----+------------+------------ 2 | 2023-02-01 | 2023-02-28 3 | 2023-03-01 | 2023-03-31 4 | 2023-04-01 | 2023-04-30 5 | 2023-05-01 | 2023-05-31 6 | 2023-06-01 | 2023-06-30 7 | 2023-07-01 | 2023-07-31 8 | 2023-08-01 | 2023-08-31 (7 行) SELECT * FROM t1 WHERE start_date <= '2024-01-31' AND end_date >= '2023-11-11'; id | start_date | end_date ----+------------+------------ 11 | 2023-11-01 | 2023-11-30 12 | 2023-12-01 | 2023-12-31 (2 行) SELECT * FROM t1 WHERE start_date <= '2024-01-31' AND end_date >= '2024-01-01'; id | start_date | end_date ----+------------+---------- (0 行) 以上、指定した範囲に該当するレコードを取得するWHER句の条件式でした。