You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:00:05