为什么“0D0”在SQL Server 2008中被视为数字?

前端之家收集整理的这篇文章主要介绍了为什么“0D0”在SQL Server 2008中被视为数字?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
知道为什么ISNUMERIC(‘0D0’)= 1在sql Server 2008中为TRUE?

我正在验证来自另一个系统的ID号,它有时包含我们不想带来的字母,但这种组合使代码跳闸(它认为数字的特定ID是“005406257D6”).下游我们正在做CONVERT(BIGINT,@ val),当它找到这些“D”值时显然会窒息.

我打的是什么特例,我该怎么说呢?

解决方法

基本上,IsNumeric是无用的 – 它验证的是字符串可以转换为任何数字类型.在这种情况下,“0D0”可以转换为浮点数. (我不记得原因,但有效地“D”是“E”的同义词,并且意味着它是科学记数法):
select CONVERT(float,'2D3')

2000

如果你想验证它只是数字,那么不像’%[^ 0-9]%’这样的@val会是一个更好的测试.您还可以通过添加长度检查来进一步改进.

原文链接:https://www.f2er.com/mssql/77399.html

猜你在找的MsSQL相关文章