SQL检测到以下字符串ISNUMERIC
:
'07213E71'
我相信这是因为'E'被归类为数学符号。
但是,我需要确保只有整数的值才会返回True。
我该怎么做?
答案 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
附加功能:
答案 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正在将该值理解为字符串。