我有一个包含2个日期列的Oracle 10g表,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')
是否可以在单个查询中检索多个随机日期的值?
e.g。 2月1日,5日,6日,11日和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 :(得分: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
答案 1 :(得分: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')