私はこのクエリを試しています:
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: キーワードがありません」というエラーが表示されるのはなぜですか?
ステートメントの外側に比較演算子が必要です。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)
あなたのケースステートメントは正しくありません。
SELECT *
FROM users_t t
WHERE t.user_id = CASE WHEN SYSDATE <= TO_DATE('20130131', 'yyyymmdd')
THEN 1254664
ELSE 1259753
END
これでタスクが完了します。
編集:より良いフォーマット。
SQLのCASE
ステートメントは常に値を返します。このCASE
ステートメントを何かと同一視する必要があります。詳しくはこちらをご覧ください。
次のようにコードを使用する必要があります。
Select * from users_t t
where
t.user_id = case
when sysdate <= to_date('20130131', 'yyyymmdd')
then 1254664
else 1259753
End