您好我有一个值,我想确保它只是存储过程中的数字。我有以下代码
if (IsNumeric(myField) =0)
begin
--does some work
end;
它应检查myField,如果数字是非数字,它确实有效,如果不是它继续。 出于某种原因,上面的代码抛出错误。知道如何解决这个问题。错误是异常被抛出varchar到int。请让我知道谢谢
答案 0 :(得分:3)
你的表达式是有效的,我怀疑你得到一个被函数认为是数值的值,但不能转换为整数。请尝试以下方法......
declare @myfield varchar(20)
set @myfield='.'
if ISNUMERIC(@myfield)=1
begin
select CONVERT(int,@myField)
end
转换语句会因您报告的错误而爆炸......
检查这个问题: T-sql - determine if value is integer
无法转换为整数的“数字”值的更多示例
select '1.e0',ISNUMERIC('1.e0') as IsNum
union
select '.',ISNUMERIC('.') as IsNum
union
select '12.31',ISNUMERIC('12.31') as IsNum
在convert(int,myField)
中添加选择begin/end
以查看导致错误发生的实际字段值
答案 1 :(得分:2)
正如其他人所指出的,isnumeric()
会在无法转换字符串的情况下返回1。
以下针对正整数的测试:
where myfield not like '%[^0-9]%'
以下测试正整数或浮点数:
where myfield not like '%[^0-9.]%' and myfield not like '%.%.%'
注意,这些方法都没有测试数字溢出。您可以使用以下内容进行测试:
where myfield not like '%[^0-9]%' and len(myfield) <= 10 and myfield <= '2147483647'
(假设没有前导0)。
答案 2 :(得分:1)
请改为选中:
if (IsNumeric(myField))
begin
--does some work
end;