我知道较新的版本有一个类似于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
答案 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
答案 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