【问题标题】:Checking for numeric validation检查数字验证
【发布时间】:2013-08-25 10:41:51
【问题描述】:

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

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

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

【问题讨论】:

  • 你得到的确切错误是什么?
  • @ojhawkins - ISNUMERIC 返回int
  • 你需要展示一些更相关的代码。您向我们展示的代码不是引发错误的代码。我们需要更多上下文来了解您实际在做什么。
  • 我的一个错误假设@Martin Smith technet.microsoft.com/en-us/library/ms186272.aspx

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


【解决方案1】:

您的表达式有效,我怀疑您得到的值被函数视为数字,但无法转换为整数。试试下面...

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  

begin/end中添加选择convert(int,myField),查看导致错误发生的实际字段值

【讨论】:

    【解决方案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)。

    【讨论】:

      【解决方案3】:

      改为这样检查:

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

      【讨论】:

      • -1 这不是正确的 TSQL 语法。 IsNumeric 是一个返回 01 的函数。它不会返回可以这样使用的布尔结果。
      猜你喜欢
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2012-12-14
      • 2013-07-08
      • 2014-03-22
      • 1970-01-01
      相关资源
      最近更新 更多