0

我遇到了 nullif () 的问题。请看以下三种情况:

场景1:

declare @val  money
declare @pctg money
select  @val = 0.00

select @pctg = nullif(@val,'')
select @pctg  
go

在第一种情况下,如果我将 0 传递给变量 @val,则 @pctg 值计算为 NULL。@pctg 变量进一步用于其他计算,结果为空。

为了解决方案 1 中的问题,我实施了方案 2:

declare @val  money
declare @pctg money
select  @val = 0.00

select @pctg = nullif(convert(varchar,@val),'')
select @pctg  
go

这现在将返回预期的 0 并且计算也很好。但现在我又用空字符串执行了一项测试,如场景 3 中所述:

declare @val  money
declare @pctg money
select  @val = ''

select @pctg = nullif(CONVERT(varchar,@val),'')
select @pctg  
go

在这里,我期望返回空值,但它将返回 0 并且我的测试失败,因为在空字符串上我需要最终值为空。

有人可以帮忙,因为场景 2 的解决方案在场景 3 中失败了。

我需要一种解决方案来处理所有这三种情况。

4

2 回答 2

1

Nullif()它与功能无关。由于您使用数字(Money)类型变量进行检查,因此空字符串 ( '') 会被隐式转换为相同类型。在 SQL Server 上,您可以将空字符串转换为数值类型。即使您预计会出现错误,您的输出也会是0.

要了解发生了什么,请试试这个小提琴演示

SELECT CONVERT(money, '') X, CONVERT(int, '') Y

--Results
  X  | Y
0.00 | 0
于 2013-11-14T14:10:32.633 回答
0

你可以尝试这样的事情:

select isNull((r1.postalcode),600006) postalcode, r2.postalcode
from ((select nullif(postalcode,' ') postalcode from customer )) r1 
right outer join customer r2 
on r1.postalcode=r2.PostalCode
于 2014-04-29T05:20:11.383 回答