在oracle包含case中更改自定义列的名称

时间:2017-03-02 11:06:55

标签: sql oracle

我无法在oracle中更改自定义列的名称。

SELECT case when sysdate between START_DATE and END_DATE then 'Y' else 'N' end case  as Flag
FROM  EXP_ECO_RATES;

它给了我错误

  

ORA-00923:找不到FROM关键字

START_DATEEND_DATE是包含日期数据类型的列。

2 个答案:

答案 0 :(得分:1)

删除case处的end case关键字。 Oracle期望在FROM之后end,因为这是CASE表达式的正确语法,但它找到了case关键字,因此您收到了错误 - {{ 1}}

将其更改为:

ORA-00923: FROM keyword not found where expected.

答案 1 :(得分:1)

显然,问题是额外的case关键字。

我想指出,使用带有日期/时间值的between是危险的。特别是,sysdate有一个时间组件。

使用显式比较更安全。通常在这种情况下,你打算:

select (case when sysdate >= START_DATE and 
                  sysdate < END_DATE + 1
             then 'Y' else 'N'
        end) as Flag
from EXP_ECO_RATES;