知道为什么吗ISNUMERIC('0D0') = 1
在 SQL Server 2008 中是 TRUE 吗?
我正在验证来自另一个系统的 ID 号,其中有时包含我们不想带过来的字母,但这种组合会使代码出错(它认为是数字的特定 ID 是“005406257D6”)。下游我们正在做的CONVERT(BIGINT, @val)
,当它找到这些“D”值时,显然是令人窒息的。
我遇到了什么特殊情况?我该如何解释?
基本上,IsNumeric 是无用的 - 它验证的只是字符串可以转换为any的数字类型。在这种情况下,“0D0”可以转换为浮点数。 (我不记得原因了,但实际上“D”是“E”的同义词,意味着它是科学计数法):
select CONVERT(float,'2D3')
2000
如果你想验证它只是数字,那么not @val like '%[^0-9]%'
将是一个更好的测试。您还可以通过添加长度检查来进一步改进这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)