使用SQL CASE语句处理日期比较与价格计算时遇ORA-00905错误求助
解决ORA-00905缺失关键字的CASE语句问题
嘿,我一眼就看出你碰到的问题啦——你的CASE语句语法用错了类型!
你原来写的是简单CASE表达式的结构(CASE 列名 WHEN 值 THEN...),但这种写法只能用来判断某列是否等于固定值,而你需要基于DtAcquired的日期范围做判断,得用搜索式CASE表达式才行,这才是触发ORA-00905错误的核心原因。
修正后的SQL语句
SELECT artname, price, CASE WHEN DtAcquired < DATE '2010-01-01' THEN TRUNC(price * 1.10, 2) WHEN EXTRACT(YEAR FROM DtAcquired) = 2010 THEN TRUNC(price * 1.05, 2) -- 如果2010年之后收购的艺术品不需要调价,就保留原价,可按需修改 ELSE price END AS newprice FROM your_art_table; -- 记得替换成你的实际表名
关键修正点
- 去掉了CASE后面多余的
Price,直接用WHEN 条件的结构,这才是搜索式CASE的正确写法 - 用
DATE '2010-01-01'代替字符串'01-JAN-2010',避免因数据库日期格式设置不同导致的解析错误,更稳定 - 把“2010年收购”的判断改成
EXTRACT(YEAR FROM DtAcquired) = 2010,这样能覆盖2010年全年的日期,而不是仅1月1日当天 - 移除了SELECT列表中重复的
newprice字段,避免语法冲突
这样写的话,就能正确计算出符合要求的新价格啦!
内容的提问来源于stack exchange,提问作者Brian Mccomas
相关产品推荐
相关产品推荐

