检查数字验证

时间:2013-08-25 10:41:52

标签: sql sql-server sql-server-2008

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

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

它应检查myField,如果数字是非数字,它确实有效,如果不是它继续。 出于某种原因,上面的代码抛出错误。知道如何解决这个问题。错误是异常被抛出varchar到int。请让我知道谢谢

3 个答案:

答案 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;