2013-04-17 90 views
2

我想這個查詢: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:缺少關鍵字」的錯誤?

回答

3

你需要一個比較操作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) 
1

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 
3

您的病例陳述不正確。

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

這將完成您的任務。

編輯:更好的格式。

+0

thanks..it工程.. – roshanK

+0

歡迎您。 – gustavodidomenico

0

此錯誤的根本原因是Oracle SQL中沒有布爾數據類型。 (我個人認爲這是一個巨大的錯誤。)

返回的條件是一個完全有效的想法,它甚至在PL工作/ SQL:

declare 
    v_test Boolean; 
begin 
    v_test := case when 1=1 then 1=1 else 1=2 end; 
end; 
/