【问题标题】:Best way to validate a number in SQL Server在 SQL Server 中验证数字的最佳方法
【发布时间】:2015-09-18 01:33:05
【问题描述】:

我知道较新的版本有一个类似于 c# 的 try parse 方法,但不幸的是我在 2005 年。我知道验证数字的内置函数的敲门是它在技术上没有,许多人建议创建一个。

仅使用 try catch 块而 catch 块被认为是错误的是否可以接受且有效?即

TRY
CONVERT(decimal(19,2),@value)
END TRY
GO
BEGIN CATCH
--false. Log error (or whatever you want to do)
END CATCH;
GO

【问题讨论】:

  • 可以使用ISNUMERIC函数
  • ISNUMERIC 是我引用的内置函数,它不是验证字符串是否为数字的真正方法,而且我工作过的大多数地方总是必须创建自己的版本
  • Checking for numeric validation 的可能重复项

标签: sql sql-server sql-server-2005


【解决方案1】:

SQL2012:

DECLARE @Test TABLE (NumAsString VARCHAR(22))
INSERT  @Test VALUES ('12.3'), ('123.45'), ('123.'), ('123'), ('.4'), ('.45'), ('.'), (''), (null)

SELECT  t.NumAsString, 
  CASE 
    WHEN TRY_PARSE(t.NumAsString AS DECIMAL(19,2)) IS NOT NULL THEN 1
    ELSE 0
  END AS [is numeric(19,2)]
FROM    @Test t

SQL Fiddle

【讨论】:

  • 该问题明确指出 OP 在 SQL Server 2005 上。
【解决方案2】:

嗯,其实你可以使用负数表达式来检查值是否为数字。是这样的

select case when numberAsString not like '%[^0-9]%' then 'true' else 'false' end from table t;

【讨论】:

    【解决方案3】:

    ISNUMERIC 在输入表达式的计算结果为有效数值数据类型时返回 1;否则返回 0。有效的数值数据类型包括:

    int
    numeric
    bigint
    money
    smallint
    smallmoney
    tinyint
    float
    decimal
    real
    

    ISNUMERIC 对某些不是数字的字符(例如加号 (+)、减号 (-))和有效的货币符号(例如美元符号 ($))返回 1。有关货币符号的完整列表,请参阅money and smallmoney (Transact-SQL).

    select ISNUMERIC(@Value)
    select case when ISNUMERIC(@Value) == 1 then 'Numeric' else 'Non Numeric' end 
    

    您可以将字符串值转换为数字或任何其他类型。

    TRY
        select CONVERT(numeric(18,2),@value)
    END TRY
    BEGIN CATCH
    --false. Log error (or whatever you want to do)
    END CATCH;
    GO
    

    【讨论】:

    • 是的,ISNUMERIC 回答了 nobody 曾经想问的问题“我可以将此字符串转换为 any 的数字数据类型吗,我不在乎哪个?”
    猜你喜欢
    • 2018-12-18
    • 2011-06-03
    • 2010-09-05
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2019-10-27
    相关资源
    最近更新 更多