IsNumeric做什么?

时间:2010-10-11 10:02:07

标签: sql-server-2008

当输入表达式求值为有效的数值数据类型时,

ISNUMERIC返回1;否则返回0(MSDN reference)。

那么为什么这个查询的输出是1?

select ISNUMERIC('5d9')

5 个答案:

答案 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)