我想这个查询: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