Duration = isnull(FunctionA(DateA,DateB),'')
上面的函数计算天数,如果天为空则显示 值0而不是空值
如何将上面的代码更改为显示空白而不是0表示null?
答案 0 :(得分:8)
如果函数返回一个整数,isnull
的结果也将是一个整数。在返回值为null
的情况下,您将隐式转换为''的整数,并且该值将为0.
试试这个:
declare @xx int
select isnull(@xx,'')
结果:
-----------
0
如果您首先将函数的返回值强制转换为varchar
,则可以拥有空格。
declare @xx int
select isnull(cast(@xx as varchar(10)),'')
结果:
----------
.
如果您的函数返回0
而不是null
,则可以在转换为nullif
之前使用varchar
获取空值。
declare @xx int = 0
select isnull(cast(nullif(@xx, 0) as varchar(10)),'')
摘要:
你需要这个:
Duration = isnull(cast(FunctionA(DateA,DateB) as varchar(10)),'')
或者
Duration = isnull(cast(nullif(FunctionA(DateA,DateB), 0) as varchar(10)),'')
答案 1 :(得分:2)
如果Duration
是数据类型int
,则无法将其更改为空字符串(空白)。您要么必须将其更改为字符串数据类型(例如varchar
),要么可以使用0
。 int
可以是NULL
(如果允许)或有效整数值。空字符串不是有效的整数值。
答案 2 :(得分:1)
我使用case语句和强制转换来执行此操作。
实施例: 当columnX<>时0然后施放(columnX作为nvarchar)否则''结束
基本上,您要更改数字以显示为字符或空白。在更改为nvarchar之前,您必须完成所有数学运算,因为除此之外,它将成为一个字符串。如果BLANK是一个命令并使用数值值,那将会很有帮助。
希望这有助于某人。
答案 3 :(得分:0)
函数返回0而不是null吗?您编写的代码可能没问题,但如果函数永远不会返回null
那么......
答案 4 :(得分:0)
您可以将Duration声明为sql_variant数据类型,并允许进行隐式转换 所以这样的事情应该有用
声明@DURATION sql_variant
选择COALESCE(@DURATION,'')
设置@DURATION = 1
选择COALESCE(@DURATION,'')