Tsql sql如何计算ISNUMERIC(ISNULL(VALUE,等等)

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不起作用时,我

我的假设是,如果该值是数值(在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不起作用时,我喜欢简化查询。首先尝试在不使用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