2013-02-19 96 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