【问题标题】:change the name of custom column in oracle contain case在 oracle 中更改自定义列的名称包含大小写
【发布时间】:2017-03-02 11:06:55
【问题描述】:

我无法在 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 是具有日期数据类型的列。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    删除end case 处的case 关键字。 Oracle 在end 之后需要FROM,因为这是CASEexpression 的正确语法,但它找到了case 关键字,因此你得到了错误-ORA-00923: FROM keyword not found where expected.

    改成:

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

    【讨论】:

    • 感谢您的快速回复。现在一切正常
    • 根据 ANSI SQL,ASkeyword 是可选的。
    【解决方案2】:

    很明显,问题出在额外的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;
    

    【讨论】:

    • 在这里,如果我使用这些运算符,那么我想它应该使用“
    • @RahulGulwani 。 . .这是给END_DATE 增加一天,严格的不等式是故意的。
    • 我想详细说一下。所以你能告诉我什么是更好的选择。对查询使用加法(“+ 1”)或使用运算符“
    • @RahulGulwani 。 . .因为有和没有时间成分的日期之间的误解,我认为加 1 更好。
    • 是的。你说的对。感谢您的所有支持和知识。
    猜你喜欢
    • 2013-07-01
    • 2017-01-06
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多