SQL正在检测以下字符串 ISNUMERIC
:
'07213E71'
我相信这是因为'E'被归类为数学符号。
但是,我需要确保只有整数的值才返回True。
我怎样才能做到这一点?
SQL正在检测以下字符串 ISNUMERIC
:
'07213E71'
我相信这是因为'E'被归类为数学符号。
但是,我需要确保只有整数的值才返回True。
我怎样才能做到这一点?
07213E71
是一个带有71个零的浮点数7213
你可以用它 ISNUMERIC(myValue + '.0e0')
测试整数。有点神秘但有效。
另一个测试是双重否定 myValue NOT LIKE '%[^0-9]%'
只允许数字0到9。
ISNUMERIC还有其他问题,这些问题都归结为1: +
, -
,
07213E71
是一个带有71个零的浮点数7213
你可以用它 ISNUMERIC(myValue + '.0e0')
测试整数。有点神秘但有效。
另一个测试是双重否定 myValue NOT LIKE '%[^0-9]%'
只允许数字0到9。
ISNUMERIC还有其他问题,这些问题都归结为1: +
, -
,
挑剔:这是一个完整的整数。它相当于 7213 * 10 ^ 71
。
在文档中说
当输入表达式求值为有效整数时,ISNUMERIC返回1 浮点 数字,金钱或小数类型;否则返回0.返回值1保证表达式可以转换为这些数字类型之一。
您的数字也是浮点数(使用指数表示法),因此拥有ISINTEGER的唯一方法是在SQL上自己定义它。阅读以下链接。
http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html
附加功能:
我遇到了同样的问题。 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 :)这是一个老项目:)
无论您使用何种语言,都必须确保它不受数据库调用的影响,然后将值传递给查询。可能SQL正在将该值理解为字符串。