何のデータベース?
では、こんなテーブルはありますか?
CREATE TABLE something
(
pay_period_start date NOT NULL,
pay_period_end date NOT NULL,
CONSTRAINT something_pkey PRIMARY KEY (pay_period_start),
CONSTRAINT something_pay_period_end_key UNIQUE (pay_period_end),
CONSTRAINT something_check CHECK (pay_period_end > pay_period_start)
);
insert into something values ('2010-08-01', '2010-08-14');
insert into something values ('2010-08-15', '2010-08-28');
insert into something values ('2010-08-29', '2010-09-11');
次に、このクエリを実行できます。('2010-08-14' は、ストップ オーダー列またはエンド オーダー列などの値です。)
select * from something
where '2010-08-14' not between pay_period_start and pay_period_end
order by pay_period_start;
そして私は得る
2010-08-15;2010-08-28
2010-08-29;2010-09-11
日付のペアには、OVERLAPS 演算子を使用します。このクエリ
select * from something
where
(date '2010-08-01', date '2010-08-14') overlaps
(pay_period_start, pay_period_end)
order by pay_period_start;
戻り値
2010-08-01;2010-08-14
開始順序と終了順序が支払い期間と完全に一致する行を除外するには、次のようにします。
select * from something
where (
(date '2010-08-01', date '2010-08-14') overlaps
(pay_period_start, pay_period_end) and
(date '2010-08-01' <> pay_period_start) and
(date '2010-08-14' <> pay_period_end)
)
order by pay_period_start;