2013-10-15 61 views
0

我有Oracle DB,以及我有一个表,其中显示日期范围:BETWEEN阵列日期

23/12/2011 08/01/2012 
06/01/2012 06/01/2012 
19/03/2012 19/03/2012 
05/04/2012 05/04/2012 
06/04/2012 06/04/2012 
30/04/2012 30/04/2012 
01/05/2012 01/05/2012 
02/05/2012 02/05/2012 
15/08/2012 15/08/2012 
12/10/2012 12/10/2012 
01/11/2012 01/11/2012 
06/12/2012 06/12/2012 
07/12/2012 07/12/2012 
08/12/2012 08/12/2012 
25/12/2012 25/12/2012 
09/01/2013 26/01/2013 
20/05/2013 08/06/2013 
24/06/2013 13/07/2013 
18/01/2013 02/02/2013 
24/05/2013 08/06/2013 

和欲越过该表具有日期,检查日期不处于对表中,像这样的日期:

select * 
from table 
where table.date NOT BETWEEN 
(SELECT DT_START FROM CALENDARIO) AND (SELECT DT_END FROM CALENDARIO)) 

之间但不接受数组作为输入,那么有没有什么办法来实现这一目标?

在此先感谢!

回答

0

试试这个希望这有助于你

WHERE (d.date1 NOT BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
    OR (d.date2 NOT BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
    OR (d.date3 NOT BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
+0

的问题是,响应是从DINAMIC表,所以我不能做一个“OR”为每个条目。 – Del

+0

您必须将所有日期存储在数组变量中,然后在查询中传递它,或者您必须使用循环执行具有不同日期范围的每个查询@Del – shivam

0

你可以尝试:

select * 
from table t1 
where not exists (
    select null 
    from CALENDARIO 
    where t1.my_date between dt_start and dt_end) 
0

我与@大卫Aldrige同意,要么不存在,或NOT IN。

NOT IN和跨加入似乎有一个更好的解释计划,如果它是表现你担心http://sqlfiddle.com/#!4/7159f/6