空白而不是零

时间:2011-11-03 17:57:51

标签: sql-server-2008 tsql

Duration = isnull(FunctionA(DateA,DateB),'')

上面的函数计算天数,如果天为空则显示 值0而不是空值

如何将上面的代码更改为显示空白而不是0表示null?

5 个答案:

答案 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),要么可以使用0int可以是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,'')