0

この質問は、私の以前の質問の 1 つに関するものです。ここで見つけることができます

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_valueorp8.pa_valuenull (空) の場合、合計結果もnullになることです。

正しい結果を得る方法はありますか?

4

2 に答える 2

1

ご指摘のとおり; NULL 値を操作すると、結果は NULL になります。したがって、pa_value の 1 つが 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
于 2012-11-14T08:15:29.623 に答える
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引数から最初の非 null 式を返します。引数はいくつでも指定できます。ISNULL(同様のTransact-SQL専用関数が呼び出されます。COALESCEただし、標準SQLであり、複数の引数を取り、正しい型の優先順位を実行するため、通常はお勧めします)

于 2012-11-14T07:54:45.573 に答える