我的假设是,如果该值为数字(在数字范围内),则返回true;如果FALSE
返回ISNULL
,则返回'blah'
。好像我的假设已经结束......
我正在以下列方式使用它
case when ISNULL(ISNUMERIC(c.npinumber), 'blah') = 1
then c.NPiNUmber
else 'not valid: ' + c.NpiNumber
end as npi
答案 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提到的那样,您可能希望查看全小写列名称。