答案 0 :(得分:3)
不确定一下就可以了! : - )
当输入表达式求值为有效整数,浮点数,货币或小数类型时,ISNUMERIC返回1
我认为在这种情况下,它正在考虑“d”代表小数,因此认为它是一个数字。
我认为5e9应该是相似的,以及“e”也用数学来表示指数..这里没有SQL现在试试看..但我认为5e9的结果应该是1出于同样的原因< / p>
编辑:更多上下文here(一些快速谷歌搜索的结果!!)
答案 1 :(得分:1)
select cast('5d9' as float)
返回
5000000000
d
似乎与e
答案 2 :(得分:1)
ISNUMERIC()
没有实际用途,通常应该避免使用。
它告诉您字符串是否可以转换为数字数据类型,但如您所见,它可以包含看似随机的字符。例如。它还可以包括+, - ,$等等。
(显然,它们不是随机的,但是如果您使用ISNUMERIC()
进行验证,那么您将很难找到一个允许其允许的所有可能性的案例)
答案 3 :(得分:0)
Hexa:5d9&lt; ==&gt;十进制:1497
答案 4 :(得分:0)
您需要进行一些额外的测试才能进行更好的测试。考虑使用Case语句。
declare @var varchar(32)
select @var = '42e2'
select @var AS InputValue,
ISNUMERIC( @var ) AS TestResult,
Case ISNUMERIC( @var )
When 1
Then CONVERT( float, @var )
Else
0
End AS SimpleConversion,
Case ISNUMERIC( @var )
When 1
Then
Case
When CONVERT( varchar(32), CONVERT( float, @var ) ) = @var
Then CONVERT( float, @var )
Else
0
End
Else
0
End AS IntegerResult
InputValue TestResult SimpleConversion IntegerResult
-------------------------------- ----------- ---------------------- ----------------------
42e2 1 4200 0
(1 row(s) affected)