0

Oracle SQL の case ステートメントについて質問があります。

where条件で、次の条件を適用したいと思います。給与日が null の場合、有効日は 2016 年 1 月 1 日よりも大きい必要があります

私は試してみました

case when salary_date is null then
trunc(effective_date) >= '01-JAN-2016' else
         null end

ただし、上記の結果は

ORA-00933: SQLコマンドが正しく終了していません

どうすればこれを解決できますか?

4

3 に答える 3

1

コードの問題は、SQL インタープリターが「then」キーワードの後に​​値を参照することを期待しているのに対し、条件句があることです。

多分このようなことを試してください:

case when salary_date is null and trunc(effective_date) >= '01-JAN-2016' 
     then <value you need> 
     else null
于 2016-10-15T08:17:58.170 に答える
0

CASEステートメントなしでこれを試すことができます

SELECT
..
..
WHERE ( trunc(effective_date) >= '01-JAN-2016' AND salary_date is null ) 
OR ( <some other condition> )
于 2016-10-15T08:14:10.600 に答える
0
...where salary_date is not null or effective_date >= date '2016-01-01'

Oracle SQL には「IF... THEN」がないため、基本的なロジックを使用してブール式を変換します。IF a THEN b は (NON a) OR b と同じです。これは私が上でやったことです。

日付を文字列と比較しないでください。'01-JAN-2016'日付ではなく文字列です。たとえば、を使用して、日付に変換する必要がありますto_date('01-JAN-2016', 'dd-MON-yyyy')

または、別の方法として、「日付リテラル」(固定日付) の入力方法に注意してください。時刻を入力する必要がない場合date '2016-01-01'は、SQL 標準 (ANSI) の「日付リテラル」である式を使用できます。次に、日付形式モデルを指定する必要はありません。常に正確な形式 yyyy-mm-dd である必要があります。

于 2016-10-15T13:13:49.053 に答える