检查数字验证(Checking for numeric validation)

2019-10-18 13:13发布

您好我有,我想,以确保它是只在存储过程的数值的数值。 我有以下代码

 if (IsNumeric(myField) =0)
 begin
   --does some work
 end;

它应该检查MyField的,如果数量为非数字,如果不是,它只是继续它的工作。 出于某种原因,上面的代码抛出错误。 不知道如何解决这个问题。 错误是异常被抛出的varchar为int。 请让我知道,谢谢

Answer 1:

你的表达是有效的,我怀疑你越来越被认为是由功能的数字值,但不能转换为整数。 请尝试以下...

declare @myfield varchar(20)
set @myfield='.'
if ISNUMERIC(@myfield)=1
begin
    select CONVERT(int,@myField)
end

转换语句将炸毁您所报告的错误...

检查这个问题了: T-SQL -确定值是否为整数

不能被转换为整数的“数字”的值更多的例子

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 ,看看实际的字段值导致错误发生



Answer 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'

(假设没有前导零)。



Answer 3:

检查它像这个:

if (IsNumeric(myField))
 begin
   --does some work
 end;


文章来源: Checking for numeric validation