2

次の PLSQL クエリによって決定される「日付」の範囲に基づいて行を選択しようとしています。これは現在、必要な結果を提供します - スクリプトが実行される曜日の最後の 10 週間の「日付」オブジェクトです。実行されます。例えば。5 月 22 日に実行すると、5 月 15 日、5 月 8 日などと続きます。

SELECT SYSDATE-(level*7) as DateRange
FROM DUAL
CONNECT BY LEVEL <=10

これにより、日付のリストが生成されます。次に、これを親のselectステートメントと組み合わせて、上記によって出力された日付が「DAY」(OracleタイプのDATE)列にある行を取得しようとします。

SELECT * FROM NEM_RM16
WHERE NEM_RM16.DAY IN (
  SELECT SYSDATE-(level*7) as DateRange
  FROM DUAL
  CONNECT BY LEVEL <=10);

上記によって生成された日付を持つ行があることを知っていても、結果は得られません。

「IN」演算子を使用する場合、値を一重引用符で囲む必要があると読みましたが、上記のクエリでこれを行う方法がわかりません。

IN 演算子を使用してこれを正しい方法で行っていますか、それとも別の種類のネストされたクエリを実行する必要がありますか?

4

2 に答える 2

3

truncからの時間コンポーネントの切り捨てに使用sysdate

SELECT * FROM NEM_RM16
WHERE NEM_RM16.DAY IN (
  SELECT trunc(SYSDATE)-(level*7) as DateRange
  FROM DUAL
  CONNECT BY LEVEL <=10);
于 2012-05-24T08:43:13.450 に答える
-1

ネストされたクエリで返される日付の形式が、NEM_RM16.DAY列の日付形式と一致していない可能性がありますおそらく、日付を同じ形式にしてから比較すると、正しく一致します

このような


SELECT *
  FROM NEM_RM16
 WHERE TO_DATE(TO_CHAR(NEM_RM16.DAY, 'DD/MM/YYYY'), 'DD/MM/YYYY') IN
       (SELECT TO_DATE(TO_CHAR(SYSDATE - (level * 7), 'DD/MM/YYYY'),
                       'DD/MM/YYYY') as DateRange
          FROM DUAL
        CONNECT BY LEVEL <= 10);

それが役に立てば幸い

于 2012-05-24T09:24:44.243 に答える