linghaiyan 发表于 2016-11-1 07:25:20

这是SQL Server的bug么?

  在论坛上看到这样一个帖子, 原文如下:




在我的SQL Server2008R2上, 试了一下, 果然是这样, 转换成numeric时报错..

看样子很奇怪, 明明函数ISNUMBERIC的返回值是1, 但是转换却不成功, 为什么呢?

查了一下BOL, 发现如下的解释:


  ISNUMBERIC函数判断表达式是否是以下类型之一:
  

  intreal
  numericbigint
  moneysmallint
  smallmoneytinyint
  floatdecimal
  
看样子ISNUMBERIC不只判断是否是NUMBERIC类型, 也判断其他如money等类型.

试了一下转换成money型, 结果就没有报错, 语句如下:

SELECT cast('14,3434' AS money);

另外如果有$符号, 也是可以转换成功的, 语句如下:

SELECT ISNUMERIC('$123');
SELECT cast('$123' AS money);


总结一下, 这不是SQL Server的bug, 只是用户容易从函数ISNUMBERIC望文生义, 以为这个函数返回1的表达式一定是可以转化为NUMBERIC型的. 其实能转换为money而不能转化为numberic型的表达式, 用ISNUMBERIC判断也是返回1的.

页: [1]
查看完整版本: 这是SQL Server的bug么?