我知道较新的版本具有类似于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
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
嗯,实际上您可以使用负数之类的表达式来检查该值是否为数字。它是这样的
select case when numberAsString not like '%[^0-9]%' then 'true' else 'false' end from table t;
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