2017-03-02 29 views
0

我無法更改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是具有日期數據類型的列。

回答

1

刪除case關鍵字end case。甲骨文預計,endFROM,因爲這是CASE表達式的語法是否正確,但它因此發現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; 
+0

感謝您的快速響應。它的工作完全正常 –

+0

根據ANSI SQL,「AS」關鍵字是可選的。 – jarlh

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; 
+0

在這裏,如果我使用這些操作符,那麼我想它應該使用「<=」而不是「<」 –

+0

@RahulGulwani。 。 。這將在「END_DATE」增加一天,嚴格的不平等是故意的。 –

+0

我想詳細去。那麼你能告訴我什麼是更好的選擇。在查詢中使用加號(「+ 1」)或使用運算符「<=」。在這兩種情況下我都會得到結果。但我想知道哪一個是更快獲得結果的方法。 –