我遇到了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中失败了。
我需要一个可以处理所有这三种情况的解决方案。
答案 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