Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中验证数字的最佳方法_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

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

在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

我知道较新版本有一种类似于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 @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