我有一个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