2012-11-14 83 views
0

此問題與我之前的一個問題有關。你可以找到它HERE如果一個字符串爲空,則將2個字符串轉換爲浮點後無法獲得結果

我想獲取2個字符串的摘要。 我管理至今:

CAST (replace((replace (p8.pa_value,'%','')),' ','') AS float (3,0)) + 
CAST (replace((replace (p9.pa_value,'%','')),' ','') AS float (3,0)) as total_discount 

的問題是,當p9.pa_valuep8.pa_value(空)的總和結果也

有沒有一種方式來獲得正確的結果?

回答

1

如果要替換一個NULL值別的東西(比方說,一個空字符串),你可以使用COALESCE

COALESCE(CAST (replace((replace (p8.pa_value,'%','')),' ','') AS float (3,0)),'') + 
COALESCE(CAST (replace((replace (p9.pa_value,'%','')),' ','') AS float (3,0)),'') as total_discount 

COALESCE返回其參數的第一個非空表達式。只要你喜歡,你可以提供儘可能多的參數。 (有一個叫做ISNULL的類似Transact-SQL的函數,我通常會推薦COALESCE,因爲它是標準的SQL,需要多個參數,並且執行正確的類型優先級)

+0

工作!非常感謝!我不知道'COALESCE' – Slim

1

正如你所說;任何對NULL值的操作都會導致NULL。所以當其中一個pa_value爲NULL時,結果也是NULL。

ISNULL可用於檢查並將NULL值轉換爲您選擇的其他值。因此查詢可以重寫爲:

ISNULL(CAST (replace((replace (p8.pa_value,'%','')),' ','') AS float (3,0)), 0.0) + 
ISNULL(CAST (replace((replace (p9.pa_value,'%','')),' ','') AS float (3,0)), 0.0) as total_discount 
相關問題