【发布时间】:2011-08-24 17:46:37
【问题描述】:
SQL 正在检测以下字符串 ISNUMERIC:
'07213E71'
我相信这是因为“E”被归类为数学符号。
但是,我需要确保只有整数值才能返回 True。
我该怎么做?
【问题讨论】:
标签: sql sql-server-2005 isnumeric
SQL 正在检测以下字符串 ISNUMERIC:
'07213E71'
我相信这是因为“E”被归类为数学符号。
但是,我需要确保只有整数值才能返回 True。
我该怎么做?
【问题讨论】:
标签: sql sql-server-2005 isnumeric
我也遇到了同样的问题。 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 :) 这是一个老项目 :)
【讨论】:
'%[0-9]%'不匹配aaaaaa5aaaaa?
07213E71 是一个带有 71 个零的浮点数 7213
您可以使用此ISNUMERIC(myValue + '.0e0') 来测试整数。有点神秘但有效。
另一个测试是双重否定 myValue NOT LIKE '%[^0-9]%',它只允许数字 0 到 9。
ISNUMERIC 还有其他问题,这些都返回 1:+、-、
【讨论】:
无论您使用哪种语言,您都必须确保它不调用数据库,然后将值传递给查询。可能 SQL 正在将该值理解为字符串。
【讨论】:
在文档中它说
ISNUMERIC 在输入表达式计算为有效整数、浮点数字、货币或小数类型时返回 1;否则返回 0。返回值 1 保证表达式可以转换为这些数字类型之一。
您的数字也是浮点数(使用指数符号),因此拥有 ISITEGER 的唯一方法是在 SQL 上自己定义它。阅读以下链接。
http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html
附加:
【讨论】:
吹毛求疵:这是一个整数。相当于7213 * 10 ^ 71。
【讨论】: