我無法更改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_DATE
和END_DATE
是具有日期數據類型的列。
我無法更改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_DATE
和END_DATE
是具有日期數據類型的列。
刪除case
關鍵字end case
。甲骨文預計,end
後FROM
,因爲這是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;
顯然,問題是額外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」)或使用運算符「<=」。在這兩種情況下我都會得到結果。但我想知道哪一個是更快獲得結果的方法。 –
感謝您的快速響應。它的工作完全正常 –
根據ANSI SQL,「AS」關鍵字是可選的。 – jarlh