Tsql sql如何计算ISNUMERIC(ISNULL(VALUE,等等)
我的假设是,如果该值是数值(在isnumeric范围内),它将返回true;但是如果Tsql sql如何计算ISNUMERIC(ISNULL(VALUE,等等),tsql,Tsql,我的假设是,如果该值是数值(在isnumeric范围内),它将返回true;但是如果ISNULL返回'blah',它将返回FALSE。看来我的假设是错的 我使用它的方式如下 case when ISNULL(ISNUMERIC(c.npinumber), 'blah') = 1 then c.NPiNUmber else 'not valid: ' + c.NpiNumber end as npi 返回0,1,0-因此您的逻辑是正确的 当SQL不起作用时,我
ISNULL
返回'blah'
,它将返回FALSE
。看来我的假设是错的
我使用它的方式如下
case when ISNULL(ISNUMERIC(c.npinumber), 'blah') = 1
then c.NPiNUmber
else 'not valid: ' + c.NpiNumber
end as npi
返回0,1,0-因此您的逻辑是正确的
当SQL不起作用时,我喜欢简化查询。首先尝试在不使用case语句的情况下运行查询。如果结果正确,则添加其他逻辑
您的数据库是什么排序规则?保持列名的大小写正确总是一个好主意(我正在看那边所有的小写列名…。您不需要ISNULL。如果ISNUMERIC是numberic,则返回1;如果ISNUMERIC是NULL或非数值,则返回0
case
when ISNUMERIC(c.NpiNumber) = 1 then c.NPiNUmber
else 'not valid: ' + c.NpiNumber
end as npi
此外,正如Euric提到的,您可能需要查看您的全小写列名。基于Dhruvesh的答案
case
when ISNUMERIC(c.npinumber) = 1 then c.NPiNUmber
else 'not valid: ' + c.NpiNumber
end as npi
将在NpiNumber为NULL时生成NULL。原因是NULL+任何字符串仍将返回NULL。解决方法是简单地使用COALESCE函数
case
when ISNUMERIC(c.npinumber) = 1 then c.NPiNUmber
else 'not valid: ' + COALESCE(c.NpiNumber, 'NULL VALUE')
end as npi
Euric,对不起,我的错误在于插入了不同的逻辑。我试了两种方法,结果都一样。我编辑了我最初的回答。我认为ISNULL调用并没有给您的语句添加任何内容。仅调用ISNUMERIC将具有相同的效果。在CASE语句中使用时,逻辑无法调用ELSE。实际上,ISNUMERIC(ISNULL(值,'blah'))返回0、1、0,与逻辑预测的完全相同。但是,当case语句中的逻辑返回0(当值为NULL时)时,它应该调用else“not valid:”。否则,它仍然返回空值。对不起,小写的大写字母,只是打字速度快,不看漂亮,只是试图理解非逻辑;-)
case
when ISNUMERIC(c.npinumber) = 1 then c.NPiNUmber
else 'not valid: ' + COALESCE(c.NpiNumber, 'NULL VALUE')
end as npi