NULLIF()函数

时间:2013-11-14 13:54:01

标签: sql sql-server

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

方案1:

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

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

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

要解决方案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

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

有人可以请求帮助,因为方案2的解决方案在方案3中失败了。

我需要一个可以处理所有这三种情况的解决方案。

2 个答案:

答案 0 :(得分:1)

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

要了解正在发生的事情,请尝试 fiddle demo

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

--Results
  X  | Y
0.00 | 0

答案 1 :(得分: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