您好我有一个名为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列,我不想为每一列写下案例。有更好的方法吗?
答案 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)