处理Null值而不使用Case

时间:2014-12-03 15:05:35

标签: sql-server

您好我有一个名为Details的表,其中包含数据类型为Day1的列Int。 现在,如果列Day1包含任何数字,那么我想显示100否则如果它包含null我想仅显示null。 除了在下面写下case case语句还有更简单的方法吗?:

Case when Day1=10 /*(Apart from 0 it can have any value including null)*/ then 100 else Day1

我有大约31列,我不想为每一列写下案例。有更好的方法吗?

5 个答案:

答案 0 :(得分:0)

当然不,如果您考虑使用ISNULL()COALESCE()功能,但可以将CASE表达式修改为如下所示

Case when Day1 > 0 or Day1 IS NULL then 100 else Day1

答案 1 :(得分:0)

您好,您可以在CASE-Statement中检查NULL:

SELECT CASE WHEN Day1 IS NULL THEN Day1 ELSE 100 END AS Day1 FROM Details

答案 2 :(得分:0)

好吧,我并没有完全明白你打算写这样一个查询的意图,但是,这个案例会做到这一点。

CASE WHEN Day1 IS NULL THEN NULL ELSE 100 END

答案 3 :(得分:0)

由于您说要检查它是否为数字,因此会想到ISNUMERIC

CASE WHEN ISNUMERIC(Day1) = 1 THEN 100 ELSE NULL END

,但我想简单写一下

CASE WHEN Day1 IS NULL THEN NULL ELSE 100 END

IIF(ISNUMERIC(Day1) = 1, 100, NULL)

更直观(在这种情况下看看你如何不需要CASE?: - ))

答案 4 :(得分:0)

如果您使用的是SQL Server 2012或更高版本:

IIF(Day1 IS NULL, NULL, 100)

或者您可以使用户定义的函数更简洁地执行相同的操作(适用于所有版本的SQL Server):

CREATE FUNCTION dbo.MyFunc(@Day int)
RETURNS int
RETURN (CASE WHEN @Day IS NOT NULL THEN 100 ELSE NULL END)

用法:

SELECT MyFunc(Day1), MyFunc(Day2)