2014-12-03 41 views
0

嗨,我有一个名为Details的表,它包含列Day1,数据类型为Int。 现在,如果列Day1包含任何数字,那么我想要显示100否则,如果它包含null我只想显示空值。 除了下面写case语句有没有更去做?:在没有case的情况下处理NULL值

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

简单的方法我有大约31列我不想为每列撰写案例。有一个更好的方法吗?

回答

0

肯定没有,如果你正在考虑使用ISNULL()COALESCE()功能,但你可以改变你的CASE表达要像下面

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

嗨,您可以在case语句检查NULL:

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

好吧,我没有完全得到你写这样一个查询的意图,但不过,这种情况下会这样做。

CASE WHEN Day1 IS NULL THEN NULL ELSE 100 END 
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) 

is more in tuitive(看你在这种情况下不需要CASE? :-))

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) 
相关问题