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

时间:2015-07-01 03:30:15

标签: sql sql-server

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

使用try catch块并将catch块视为false是否可接受且有效?即

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

好吧,实际上你可以使用负面表达来检查值是否为数字。它是这样的

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

答案 2 :(得分:0)

当输入表达式求值为有效的数值数据类型时,

ISNUMERIC 返回1;否则返回0.有效的数字数据类型包括以下内容:

int
numeric
bigint
money
smallint
smallmoney
tinyint
float
decimal
real

对于某些非数字字符,例如加号(+),减号( - )和有效货币符号(如美元符号($)),ISNUMERIC返回1。有关货币符号的完整列表,请参阅http://miftyisbored.com/complete-social-login-application-tutorial-cakephp-2-3-twitter-facebook-google/

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