我想這個查詢:SQL Case語句拋缺少關鍵字的錯誤
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:缺少關鍵字」的錯誤?
我想這個查詢:SQL Case語句拋缺少關鍵字的錯誤
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)
SQL中的CASE
語句總是返回一個值。你需要將這個CASE
聲明等同於某件事。閱讀更多關於它here。
你應該用你的代碼如下:
Select * from users_t t
where
t.user_id = case
when sysdate <= to_date('20130131', 'yyyymmdd')
then 1254664
else 1259753
End
您的病例陳述不正確。
SELECT *
FROM users_t t
WHERE t.user_id = CASE WHEN SYSDATE <= TO_DATE('20130131', 'yyyymmdd')
THEN 1254664
ELSE 1259753
END
這將完成您的任務。
編輯:更好的格式。
此錯誤的根本原因是Oracle SQL中沒有布爾數據類型。 (我個人認爲這是一個巨大的錯誤。)
返回的條件是一個完全有效的想法,它甚至在PL工作/ SQL:
declare
v_test Boolean;
begin
v_test := case when 1=1 then 1=1 else 1=2 end;
end;
/
thanks..it工程.. – roshanK
歡迎您。 – gustavodidomenico