如何在SQL中显示int数据类型的空值?

时间:2019-03-14 22:17:38

标签: sql sql-server

如何在SQL中显示int数据类型的空值?

我在int数据类型列上有一个case语句,以显示小于或等于0的值为空。

case when [TotalValue] <= 0 Then ''
 when [TotalValue] > 0 Then [TotalValue]
 End as [TotalValue]

现在,对于小于或等于0的任何值,case语句将返回0。我希望将它们设置为Empty。用0而不是负值表示不正确。

如何将记录转换为仅显示空白?

2 个答案:

答案 0 :(得分:1)

您的代码的问题是Then ''会自动转换为int的值,对于空字符串,该值恰好为0(尝试select CAST('' as int)进行检查)。
模棱两可定义的列(例如您的列)的数据类型由data type precedence rules确定。

明确定义列的数据类型将解决此问题。

我建议尝试从数据库中返回NULL,如下所示:

case when [TotalValue] <= 0 Then NULL
 when [TotalValue] > 0 Then [TotalValue]
 End as [TotalValue] 

您的报表引擎很可能会将NULL转换为类似空字符串的内容。此外,如果您的报表引擎支持数字值,则可能会获得一些操纵数字值的好处(例如,计算平均值而不是选择值)。

或者,尝试在SQL中将值强制转换为字符串:

case when [TotalValue] <= 0 Then ''
 when [TotalValue] > 0 Then CAST([TotalValue] as varchar)
 End as [TotalValue]

答案 1 :(得分:0)

我认为最简单的构造是:

b.location = '2001