在SQL Server中验证数字的最佳方法

问题描述 投票:2回答:3

我知道较新的版本具有类似于c#的try解析方法,但不幸的是我在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
sql sql-server sql-server-2005
3个回答
0
投票

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


0
投票

嗯,实际上您可以使用负数之类的表达式来检查该值是否为数字。它是这样的

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

0
投票
输入表达式计算为有效数字数据类型时,

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
© www.soinside.com 2019 - 2024. All rights reserved.