带Tab键的ISNUMERIC函数(9)

时间:2016-09-21 09:59:28

标签: sql sql-server tsql

当我遇到一个奇怪的麻烦时,我正在使用SQL Server中的ISNUMERIC函数。

检查包含以下字符的文本ISNUMERIC函数返回1(true)。为什么呢?

Tab char(9)
Line feed char(10)
Carriage return char(13)

由于

1 个答案:

答案 0 :(得分:3)

不仅是Char(9),它还适用于以下所有值。

SELECT [Ascii Code]        = STR(Number),
        [Ascii Character]   = CHAR(Number),
        [ISNUMERIC Returns] = ISNUMERIC(CHAR(Number))
   FROM Master.dbo.spt_Values
  WHERE Type = 'P'
    AND Number BETWEEN 0 AND 255
    AND ISNUMERIC(CHAR(Number)) = 1

Ascii Code Ascii Character ISNUMERIC Returns 
---------- --------------- ----------------- 
         9                 1
        10                 1
        11                 1
        12                 1
        13                 1
        36 $               1
        43 +               1
        44 ,               1
        45 -               1
        46 .               1
        48 0               1
        49 1               1
        50 2               1
        51 3               1
        52 4               1
        53 5               1
        54 6               1

来自官方文件......重点突出......

  

当输入表达式计算为有效整数,浮点数,金钱或小数类型时,ISNUMERIC返回1;否则返回0.返回值1保证表达式可以转换为这些数值类型之一

因此如果Isnumeric返回上面突出显示部分中的任何一个类型,它将返回1。

Jeff moden描述部分here ..

的原因
  

有许多不同的字母,数字和符号组合可以实际转换为数字数据类型,ISNUMERIC将为所有这些组合返回“1”。这不是一个缺陷......这就是它的工作方式!

参考文献:
http://www.sqlservercentral.com/articles/ISNUMERIC()/71512/