当我在Server中使用ISNUMERIC函数时,遇到了一个奇怪的麻烦。
检查文本,包括下面的字符ISNUMERIC函数返回1(true)。为什么?
Tab char(9)
Line feed char(10)
Carriage return char(13)谢谢
发布于 2016-09-21 10:01:14
不仅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从官方docs..emphasis上高亮显示..。
当输入表达式计算为有效整数、浮点数、货币或十进制类型时,ISNUMERIC返回1;否则返回0。返回值1保证表达式可以转换为这些数值类型之一。
因此,如果Is数值返回上述突出显示部分中的任何一种类型,它将返回1。
Jeff描述了为什么部分这里。
有许多字母、数字和符号的不同组合,它们实际上可以转换为数字数据类型,ISNUMERIC将为所有这些类型返回一个"1“。这不是缺陷..。它应该是这样工作的!
参考文献:
http://www.sqlservercentral.com/articles/ISNUMERIC()/71512/
https://stackoverflow.com/questions/39613330
复制相似问题