ISNUMERIC('07213E71')=真的吗?

时间:2011-05-13 07:58:58

标签: sql sql-server-2005 isnumeric

SQL检测到以下字符串ISNUMERIC

'07213E71'

我相信这是因为'E'被归类为数学符号。

但是,我需要确保只有整数的值才会返回True。

我该怎么做?

5 个答案:

答案 0 :(得分:19)

07213E71是一个带有71个零的浮点数7213

您可以使用此ISNUMERIC(myValue + '.0e0')来测试整数。有点神秘但有效。

另一个测试是双重否定myValue NOT LIKE '%[^0-9]%',它只允许数字0到9。

ISNUMERIC还有其他问题,这些问题都返回1:+-

答案 1 :(得分:1)

to nitpick:这是一个完整的整数。它相当于7213 * 10 ^ 71

答案 2 :(得分:1)

在文档中说

  当输入表达式求值为有效整数,浮点数数字,货币或小数类型时,

ISNUMERIC返回1;否则返回0.返回值1保证表达式可以转换为这些数字类型之一。

您的数字也是浮点数(带指数表示法),因此拥有ISINTEGER的唯一方法是在SQL上自己定义它。阅读以下链接。

http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html

附加功能:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=59049

http://www.tek-tips.com/faqs.cfm?fid=6423

答案 3 :(得分:0)

我遇到了同样的问题。 IsNumeric接受“$,€,+, - 等”作为有效输入,转换函数因此引发错误。 使用“LIKE”SQL语句修复了我的问题。我希望它能帮助其他人

SELECT UnitCode, UnitGUID, Convert(int, UnitCode) AS IntUnitCode
      FROM [NG_Data].[NG].[T_GLB_Unit]  
     WHERE ISNULL(UnitType,'') <>'Department'
       AND UnitCode NOT LIKE '%[^0-9]%'
  ORDER BY IntUnitCode

PS:不要责怪我使用“UnitCode”作为nvarchar :)这是一个旧项目:)

答案 4 :(得分:-4)

无论使用何种语言,都必须确保它不受数据库调用的影响,然后将值传递给查询。可能SQL正在将该值理解为字符串。