2017-08-30 30 views
1

が続かなければならない、ORA-01797:私はクエリを実行していますが、このオペレータが任意またはすべてのエラー

select * 
from file_log f 
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and 
     F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and 
     F.TRANS_DT<=('08/30/2017','mm/dd/yyyy') 

は、次のエラーを取得しています:

ORA-01797: this operator must be followed by ANY or ALL.

あなたのすべては、私を助けてもらえこのエラーが発生するように適切なクエリを記述していますか?

答えて

2

だけdateキーワードとISOの定数を使用します。

select * 
from file_log f 
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and 
     F.TRANS_DT >= date '2017-08-25' and 
     F.TRANS_DT <= date '2017-08-30'; 

第2の定数はto_date()が欠落しているので、あなたがエラーを取得しています。しかし、日付定数に適切な構文を使用することもできます。

+0

to_dateは、[ドキュメント]のとおり、日付リテラルを指定するための完全な方法です。(https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements003.htm#SQLRF51062) 'DATEリテラルは、Oracle Databaseが文字列リテラルのかわりにTO_DATE式を受け入れる唯一のケースです。 – Boneist

2

あなたがTO_DATE不足している:SQLパーサは、あなたがTO_DATE機能を使用することを意図していることを見分けることができません

を、最終ラインがしようとしている前提としています。それはその例外を投げているのはなぜ

select * 
from file_log f 
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and 
     F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and 
     F.TRANS_DT<=TO_DATE('08/30/2017','mm/dd/yyyy')  -- Missing on this line 

F.TRANS_DTと1つ(ANY)またはその両方(ALL)の値を('08/30/2017','mm/dd/yyyy')と比較すると、クエリの構文は次のようになります。

select * 
from file_log f 
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and 
     F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and 
     F.TRANS_DT<= ANY ('08/30/2017','mm/dd/yyyy') 

構文的に有効なクエリです。しかし、F.TRANS_DT <= 'mm/dd/yyyy'の比較を解析しようとすると、右側の文字列を暗黙的にORA-01858: a non-numeric character was found where a numeric was expectedで失敗する日付に変換しようとします。しかし、SQLパーサーは、クエリを有効にするために欠けているものを提案するために最善を尽くしました。

関連する問題