我有以下SQL case語句。指定SQL case語句的返回類型
select tracking_num,
case
when source_one is not null then source_one
else source_two
end source_value
from ...
source_one和source_two是雙精度。如果我執行上面的SQL,那麼返回的source_value列是int精度的。
一位同事建議在列名的開頭添加ohd_。
select tracking_num,
case
when source_one is not null then source_one
else source_two
end ohd_source_value
from ...
這將返回正確的值(返回的列名爲'source_value')。
ohd_前綴是oracle標準嗎?我無法在任何地方找到文檔。另外,是否有更好的方式來執行此轉換?也許通過使用CAST關鍵字?
謝謝您的提前回復。
DB版本:Oracle數據庫11g企業版發佈11.2.0.3.0 - 64位
編輯:作爲隨訪到我提到的ohd_前綴。事實證明,這被烘焙到我們的客戶端作爲一個解決oracle的bug#1312311。 OHD顯然代表「Oracle Hack Double」。
你爲什麼不使用'COALESCE(source_one,source_two)'?如果Oracle因爲您選擇的列前綴BTW而改變其行爲,我會感到驚訝! – 2013-05-13 17:50:52
+1給Tony;希望它是一個答案。從未聽說過「哦」前綴,但它可能與任何客戶端正在接收行有關。請注意,如果您只是運行「選擇」,那麼這些列並沒有真正的「類型」。 – BellevueBob 2013-05-13 17:56:04
我不認爲在case語句中混合兩種列類型是不可能的。 oracle會隱式轉換爲varchar2。 – haki 2013-05-13 18:10:07