2013-04-17 60 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; 
/