12

SQL正在检测以下字符串ISNUMERIC

'07213E71'

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

但是,我需要确保仅返回整个整数的值。

我怎样才能做到这一点?

4

5 回答 5

21

07213E71是浮动编号7213,带有71个零

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

另一个测试是Double负面myValue NOT LIKE '%[^0-9]%',仅允许数字0到9。

Isnumeric还有其他问题,因为所有这些都返回1 +-

于 2011-05-13T08:03:15.687 回答
1

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

于 2011-05-13T08:02:31.753 回答
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

于 2011-05-13T08:04:30.933 回答
0

我遇到了同样的问题。IsNumeric 接受“$、€、+、-等”作为有效输入,因此 Convert 函数会抛出错误。使用“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 :) 这是一个旧项目:)

于 2013-06-12T09:28:30.770 回答
-4

无论您使用什么语言,您都必须确保它从数据库的呼叫中,然后将值传递给查询。SQL可能是将该值作为字符串理解。

于 2011-05-13T08:04:32.733 回答