Sql server 不带大小写地处理空值

Sql server 不带大小写地处理空值,sql-server,Sql Server,您好,我有一个名为Details的表,其中包含列Day1,数据类型为Int。 现在,如果列Day1包含任何数字,那么我想显示100,否则如果它包含null,我只想显示null。 除了写下面的案例陈述,还有更简单的方法吗 Case when Day1=10 /*(Apart from 0 it can have any value including null)*/ then 100 else Day1 我有大约31个专栏,我不想为每个专栏写案例。有更好的方法吗?当然没有,如果您正在考虑使用IS

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

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

我有大约31个专栏,我不想为每个专栏写案例。有更好的方法吗?

当然没有,如果您正在考虑使用
ISNULL()
COALESCE()
函数,但您可以将
大小写
表达式修改为如下所示

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

您好,您可以在CASE语句中检查NULL:

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

好吧,我不知道你写这样一个问题的意图是什么,但无论如何,这个案子可以做到

CASE WHEN Day1 IS NULL THEN NULL ELSE 100 END

既然你说你想检查它是否是一个数字,
ISNUMERIC

CASE WHEN ISNUMERIC(Day1) = 1 THEN 100 ELSE NULL END
,但我认为这只是写作

CASE WHEN Day1 IS NULL THEN NULL ELSE 100 END


如果您使用的是SQL Server 2012或更高版本,则更直观(请参见本例中如何不需要
案例?:-)

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

用法:

SELECT MyFunc(Day1), MyFunc(Day2)
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)