2017-07-19 5 views
1

Oracle関数にdate - DAYSを渡そうとしましたが、エラーが発生しました。Oracle関数が日付を渡すことができません - DAYS

この1つは正常に動作: ORA-00907:欠落している私は、別のSELECTにこれを変更する右括弧

SELECT 
    MYFUNCTION(TRUNC(SYSDATE) - 730 DAYS) 
FROM 
    dual; 

、それが動作

SELECT 
    TRUNC(SYSDATE) - 730 DAYS 
FROM 
    dual; 

この1つは、エラーが返されますしかし、なぜそれはそうですか? 私は上記の方が気に入っています。なぜなら、それを月や年などに変更する必要があるからです。しかし、それは動作しません。

SELECT 
    MYFUNCTION(
     (
     SELECT 
      TRUNC(SYSDATE) - 730 DAYS 
     FROM 
      dual 
     ) 
    ) 
FROM 
    dual; 

答えて

1

あなたは誤って使用すると、間隔730 DAYSを扱っていると思います。しかし

SELECT TRUNC(SYSDATE) - 730 DAYS FROM dual; 

だからあなたがこの日から数を加算または減算が定義されている方法であるとしてOracleは、730日を意味するために730を取り、その後、あなたはこの結果を呼び出すTRUNC(SYSDATE) - 730を計算

SELECT TRUNC(SYSDATE) - 730 AS DAYS FROM dual; 

です列 "DAYS"。

これは構文エラーでなぜ

SELECT MYFUNCTION(TRUNC(SYSDATE) - 730 DAYS) FROM dual; 

結果を説明します。所属していない別名(「DAYS」)を使用しています。

代わりにこの

SELECT MYFUNCTION(TRUNC(SYSDATE) - 730) FROM dual; 

または

SELECT MYFUNCTION(TRUNC(SYSDATE) - INTERVAL '730' DAY(3)) FROM dual; 

してください。

関連する問題