我的假设是,如果该值是数字(在非数字范围内)但FALSE
如果ISNULL
返回'blah'
. 看来我的假设是错误的...
我以以下方式使用它
case when ISNULL(ISNUMERIC(c.npinumber), 'blah') = 1
then c.NPiNUmber
else 'not valid: ' + c.NpiNumber
end as npi
我的假设是,如果该值是数字(在非数字范围内)但FALSE
如果ISNULL
返回'blah'
. 看来我的假设是错误的...
我以以下方式使用它
case when ISNULL(ISNUMERIC(c.npinumber), 'blah') = 1
then c.NPiNUmber
else 'not valid: ' + c.NpiNumber
end as npi
您不需要 ISNULL。ISNUMERIC 将返回 1 如果它是数字或 0 如果它是 NULL 或非数字。
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
select ISNUMERIC(ISNULL(NULL, 'blah')),
ISNUMERIC(ISNULL(1234, 'blah')),
ISNUMERIC(ISNULL('ab', 'blah'))
返回 0, 1, 0 - 所以你的逻辑是正确的。
当 SQL 不正常时,我喜欢简化我的查询。尝试先在没有 case 语句的情况下运行查询。如果结果看起来正确,则添加其他逻辑。
你的数据库是什么排序规则?保持列名正确大小写总是一个好主意(我正在查看那里的全小写列名......)。