3

我的假设是,如果该值是数字(在非数字范围内)但FALSE如果ISNULL返回'blah'. 看来我的假设是错误的...

我以以下方式使用它

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

3 回答 3

2

您不需要 ISNULL。ISNUMERIC 将返回 1 如果它是数字或 0 如果它是 NULL 或非数字。

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

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

于 2012-08-21T05:56:46.180 回答
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
于 2012-08-21T18:44:05.527 回答
1
select  ISNUMERIC(ISNULL(NULL, 'blah')),
        ISNUMERIC(ISNULL(1234, 'blah')),
        ISNUMERIC(ISNULL('ab', 'blah')) 

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

当 SQL 不正常时,我喜欢简化我的查询。尝试先在没有 case 语句的情况下运行查询。如果结果看起来正确,则添加其他逻辑。

你的数据库是什么排序规则?保持列名正确大小写总是一个好主意(我正在查看那里的全小写列名......)。

于 2012-08-21T04:07:31.057 回答