0

DATE_VALID_FROM from と DATE_VALID_TO の 2 つの日付列を含む Oracle 10g テーブルがあります。

マイテーブル:

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

日付列の範囲は常に 1 日 (週末) とは限りません。

このように単一の日付の値を取得できます。

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')

単一のクエリで複数のランダムな日付の値を取得することは可能ですか?

例: 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
4

2 に答える 2

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

于 2013-02-19T17:00:20.367 に答える
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'してください。

ps日付を使用するときは、常に形式を指定する必要があります。すなわちしないでください:

TO_DATE('16-FEB-13')

むしろ:

TO_DATE('16-FEB-13', 'dd-MON-rr')
于 2013-02-19T17:07:57.357 に答える