0

这个问题是关于我以前的问题之一。你可以在这里找到

我正在尝试获取 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_value(空)时,总和结果也为

有没有办法得到正确的结果?

4

2 回答 2

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 only 函数。不过我通常会推荐COALESCE,因为它是标准 SQL,接受多个参数,并执行正确的类型优先级)

于 2012-11-14T07:54:45.573 回答
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
于 2012-11-14T08:15:29.623 回答