在SQL Server中验证数字的最佳方法
我知道较新版本有一种类似于c#的尝试解析方法,但不幸的是,我在2005年。我知道,验证数字的内置函数在技术上不起作用,许多人建议创建一个 仅使用try-catch块并将catch块视为false是否可以接受和有效?即在SQL Server中验证数字的最佳方法,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我知道较新版本有一种类似于c#的尝试解析方法,但不幸的是,我在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 SQL2012: DECLARE @Tes
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。有关货币符号的完整列表,请参见
您可以将字符串值转换为数字或任何其他类型
TRY
select CONVERT(numeric(18,2),@value)
END TRY
BEGIN CATCH
--false. Log error (or whatever you want to do)
END CATCH;
GO
您可以使用ISNUMERIC函数ISNUMERIC是我引用的buil int函数,它不是验证字符串是否为数字的真正方法,我工作过的大多数地方都必须创建自己的版本可能重复Yes,
ISNUMERIC
回答了从来没有人想问的问题“我可以将此字符串转换为任何数字数据类型吗?我不在乎是哪种类型?”问题特别指出OP在SQL Server 2005上。
TRY
select CONVERT(numeric(18,2),@value)
END TRY
BEGIN CATCH
--false. Log error (or whatever you want to do)
END CATCH;
GO