SQL检测到以下字符串
ISNUMERIC
:'07213E71'
我认为这是因为'E'被归类为数学符号。 然而,我需要确保仅返回整数值为真。 我该怎么做?ISNUMERIC
:'07213E71'
我认为这是因为'E'被归类为数学符号。 然而,我需要确保仅返回整数值为真。 我该怎么做?07213E71
是一个浮点数,表示 7213 后面跟着 71 个零。
你可以使用 ISNUMERIC(myValue + '.0e0')
来测试整数。这有点神秘,但是可行的。
另一种测试方法是使用双重否定 myValue NOT LIKE '%[^0-9]%'
,它只允许数字 0 到 9。
ISNUMERIC 还有其他问题,因为这些都会返回 1:+
,-
,
7213 * 10 ^ 71
。在文档中它说:
当输入表达式评估为有效的整数、浮点数、货币或十进制类型时,ISNUMERIC返回1;否则返回0。返回值为1保证表达式可以转换为这些数字类型之一。
你的数字也是浮点数(带指数符号),因此唯一的方法是在SQL上自定义ISINTEGER。请阅读以下链接。
http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html
附加内容:
我遇到了同样的问题。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
吗? - Marie无论您使用哪种语言,都必须确保从数据库调用中获取值,并将其传递给查询。可能SQL会将该值视为字符串。