2013-02-19 97 views
0

我有一个Oracle 10g表,其中包含2个日期列DATE_VALID_FROM和DATE_VALID_TO。带日期参数列表的查询日期范围列

MY_TABLE:

DATE_VALID_FROM | DATE_VALID_TO | VALUE 

15-FEB-13  | 17-FEB-13  | 1.833 
14-FEB-13  | 14-FEB-13  | 1.836 
13-FEB-13  | 13-FEB-13  | 1.824 
12-FEB-13  | 12-FEB-13  | 1.82 
11-FEB-13  | 11-FEB-13  | 1.822 
08-FEB-13  | 10-FEB-13  | 1.826 
07-FEB-13  | 07-FEB-13  | 1.814 
06-FEB-13  | 06-FEB-13  | 1.806 
05-FEB-13  | 05-FEB-13  | 1.804 
04-FEB-13  | 04-FEB-13  | 1.796 
01-FEB-13  | 03-FEB-13  | 1.801 

上的日期栏的范围并不总是一天(周末)。

我可以检索一个日期这样的价值,

select DATE_VALID_FROM, DATE_VALID_TO, VALUE 
from MY_TABLE 
where DATE_VALID_FROM <= TO_DATE('16-FEB-13', 'dd-MON-yy') 
and DATE_VALID_TO >= TO_DATE('16-FEB-13', 'dd-MON-yy') 

是否有可能检索单个查询多个随机日期值是多少?

例如价值观为第1,第5,第6,第11和2月16日

生产这种结果集:

DATE_VALID_FROM | DATE_VALID_TO | VALUE 

15-FEB-13  | 17-FEB-13  | 1.833 
11-FEB-13  | 11-FEB-13  | 1.822 
06-FEB-13  | 06-FEB-13  | 1.806 
05-FEB-13  | 05-FEB-13  | 1.804 
01-FEB-13  | 03-FEB-13  | 1.801 
+0

对不起,我不明白你正在尝试做的。您正试图选择哪些日期的值? – 2013-02-19 16:50:01

回答

0

尝试:

select DATE_VALID_FROM, DATE_VALID_TO, VALUE 
from MY_TABLE M 
JOIN (SELECT TO_DATE('01-FEB-2013') DATE_PARAM FROM DUAL UNION ALL 
     SELECT TO_DATE('05-FEB-2013') DATE_PARAM FROM DUAL UNION ALL 
     SELECT TO_DATE('06-FEB-2013') DATE_PARAM FROM DUAL UNION ALL 
     SELECT TO_DATE('11-FEB-2013') DATE_PARAM FROM DUAL UNION ALL 
     SELECT TO_DATE('16-FEB-2013') DATE_PARAM FROM DUAL) D 
    ON M.DATE_VALID_FROM <= D.DATE_PARAM and M.DATE_VALID_TO >= D.DATE_PARAM 

SQLFiddle here

0

你可以使用一个集合这个:

SQL> create type mydatetab as table of date; 
    2/

Type created. 

SQL> with dates as (select /*+ cardinality(t, 5) */ t.column_value thedate 
    2     from table(mydatetab(TO_DATE('16-FEB-13', 'dd-mon-rr'), 
    3          TO_DATE('13-FEB-13', 'dd-mon-rr'))) t) 
    4 select DATE_VALID_FROM, DATE_VALID_TO, VALUE 
    5 from MY_TABLE, dates 
    6 where dates.thedate between DATE_VALID_FROM and DATE_VALID_TO; 

DATE_VALI DATE_VALI  VALUE 
--------- --------- ---------- 
13-FEB-13 13-FEB-13  1.824 
15-FEB-13 17-FEB-13  1.833 

如果你没有权限创建一个(即这只是一个特别的东西)。可能会有一些公共场所可以使用。请检查select * from all_coll_types where elem_type_name = 'DATE'

p.s.您应该在使用日期时始终指定格式。即不这样做:

TO_DATE('16-FEB-13') 

而是:

TO_DATE('16-FEB-13', 'dd-MON-rr') 
+0

编辑OP格式正确。 – HalloweenHead 2013-02-19 17:53:58