sql如何评估ISNUMERIC(ISNULL(VALUE,' blah'))

时间:2012-08-21 03:52:13

标签: tsql

我的假设是,如果该值为数字(在数字范围内),则返回true;如果FALSE返回ISNULL,则返回'blah'。好像我的假设已经结束......

我正在以下列方式使用它

case when ISNULL(ISNUMERIC(c.npinumber), 'blah') = 1
       then c.NPiNUmber
     else 'not valid: ' + c.NpiNumber
     end as npi 

3 个答案:

答案 0 :(得分:2)

以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

答案 1 :(得分:1)

select  ISNUMERIC(ISNULL(NULL, 'blah')),
        ISNUMERIC(ISNULL(1234, 'blah')),
        ISNUMERIC(ISNULL('ab', 'blah')) 

返回0,1,0 - 所以你的逻辑是正确的。

当SQL不行为时我想简化我的查询。尝试先运行查询而不使用case语句。如果结果看起来正确,则添加其他逻辑。

您的数据库是什么排序规则?保持列名称正确(我正在查看那里的全小写列名称......)。

答案 2 :(得分:1)

您不需要ISNULL。如果数字为数字,则ISNUMERIC将返回1,如果为NULL或非数字,则返回0。

  case
       when ISNUMERIC(c.NpiNumber) = 1 then c.NPiNUmber
       else 'not valid: ' + c.NpiNumber
  end as npi 

另外,正如Euric提到的那样,您可能希望查看全小写列名称。