我有一個sql查詢來檢查產品記錄在表PRODUCTS中的重疊。 在大多數情況下,查詢可以正常工作,但下列情況除外。重疊數據
select * from products where
product_reg_no = 'AL-NAPT'
and (to_date('14-Aug-2001') BETWEEN to_date('27-Aug-2001') AND to_date('30-Aug-2001')
or to_date('31-Aug-2001') BETWEEN to_date('27-Aug-2001') AND to_date('30-Aug-2001'))
如何使此查詢捕獲所有記錄部分或完全重疊?
如果需要,我可以提供帶有樣本記錄的表結構。
由於
更新1
我已經加入表的結構和記錄here或如下:
create table products
(product_reg_no varchar2(32),
start_date date,
end_date date);
Insert into products
(product_reg_no, START_DATE, END_DATE)
Values
('AL-NAPT', TO_DATE('08/14/2012', 'MM/DD/YYYY'), TO_DATE('08/31/2012', 'MM/DD/YYYY'));
Insert into products
(product_reg_no, START_DATE, END_DATE)
Values
('AL-NAPT', TO_DATE('08/27/2012', 'MM/DD/YYYY'), TO_DATE('08/30/2012', 'MM/DD/YYYY'));
COMMIT;
第一個記錄是從八月,14 2012到八月, 31 2012與 重疊第二條記錄從2012年8月27日至2012年8月30日。那麼,如何修改我的查詢以獲得重疊?
是日期值中的一個(或幾個)應該來自於數據庫中的列?最好爲產品表提供一個最小模式,併爲其提供一些示例行。我打算建議OVERLAP操作符,但Google建議它不提供Oracle記錄(儘管它存在),所以也許你不能(不應該)使用它。你可能想看看[確定兩個日期範圍是否重疊](http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap/328558#328558)。 –
@JonathanLeffler用[sqlfiddle](http://sqlfiddle.com/#!4/03d61/1)更新了我的問題謝謝 – user75ponic