2

私はこのクエリを試しています:

Select * from users_t t
where
case when sysdate <= to_date('20130131', 'yyyymmdd')
then t.user_id=1254664
else t.user_id=1259753
End

「ORA-00905: キーワードがありません」というエラーが表示されるのはなぜですか?

4

4 に答える 4

4

ステートメントの外側に比較演算子が必要です。case

Select * from users_t t
where
(case when sysdate <= to_date('20130131', 'yyyymmdd')
then 254664
else 1259753
End) = t.user_id

ただし、caseステートメントなしでこれを書くことができます:

select *
from users_t t
where ((sysdate <= to_date('20130131', 'yyyymmdd') and t.user_id = 254664) or
      ((sysdate > to_date('20130131', 'yyyymmdd') and t.user_id = 1259753)
于 2013-04-17T18:24:02.850 に答える
3

あなたのケースステートメントは正しくありません。

SELECT * 
FROM users_t t
WHERE t.user_id = CASE WHEN SYSDATE <= TO_DATE('20130131', 'yyyymmdd')
                       THEN 1254664
                       ELSE 1259753
                  END

これでタスクが完了します。

編集:より良いフォーマット。

于 2013-04-17T18:24:03.210 に答える
1

SQLのCASEステートメントは常に値を返します。このCASEステートメントを何かと同一視する必要があります。詳しくはこちらをご覧ください。

次のようにコードを使用する必要があります。

Select * from users_t t
where
t.user_id = case
                 when sysdate <= to_date('20130131', 'yyyymmdd')
                 then 1254664
                 else 1259753
            End
于 2013-04-17T18:24:02.317 に答える