SQL正在检测以下字符串ISNUMERIC
:
'07213E71'
我相信这是因为“ E”被归类为数学符号。
但是,我需要确保仅返回整个整数的值。
我怎样才能做到这一点?
SQL正在检测以下字符串ISNUMERIC
:
'07213E71'
我相信这是因为“ E”被归类为数学符号。
但是,我需要确保仅返回整个整数的值。
我怎样才能做到这一点?
07213E71
是浮动编号7213,带有71个零
您可以使用它ISNUMERIC(myValue + '.0e0')
来测试整个整数。有点神秘,但有效。
另一个测试是Double负面myValue NOT LIKE '%[^0-9]%'
,仅允许数字0到9。
Isnumeric还有其他问题,因为所有这些都返回1 +
:-
nitpick:这是一个整数。它相当于7213 * 10 ^ 71
。
在文档中说
ISNUMERIC返回1,当输入表达式计算为一个有效的整数,浮点数字,货币或小数类型; 否则返回0的1个保证返回值的表达可以被转换为数字这些类型中的一种。
您的号码也是浮动(带指数符号),因此,拥有Isinteger的唯一方法是在SQL上自行定义它。阅读以下链接。
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 :) 这是一个旧项目:)
无论您使用什么语言,您都必须确保它从数据库的呼叫中,然后将值传递给查询。SQL可能是将该值作为字符串理解。