是否有任何函数检查数学表达式并在SQL Server中返回有效数字?

时间:2016-06-01 20:17:50

标签: sql sql-server sql-server-2012

我有以下代码,我使用ISnumeric函数来检查表达式的有效性,以便在sql中进行数学运算。

但如果我在这里使用ISnumeric函数,它会为下面列出的两个条件返回0。我需要一些函数或方法来识别有效的数学表达式。

这个有替代品吗?

Begin
DECLARE @rcnt as VARCHAR(100)
DECLARE @ncnt as VARCHAR(100)
--Condition1
SET @rcnt = '(5918800.000 / 4963400.000) * (Slaughter(1023))'
--Condition2
SET @ncnt = '(5997200.000 / 5059900.000) * (400000.000)'

Select ISNUMERIC(@rcnt) as validittcheck
Select ISNUMERIC(@ncnt ) as validittcheck

END

1 个答案:

答案 0 :(得分:1)

ISNUMERIC()检查变量是否为有效的数值数据类型,而不是对字符串表达式的求值结果是有效数值。第一个'('被评估后,您的值就变为非数字。

我知道获得所需结果的唯一方法是使用动态sql。这是一个例子,请注意我把try catch放在那里因为你的Slaughter()函数不存在而且引发了异常,所以返回零,因为它不是一个数字:

DECLARE @rcnt as NVARCHAR(100)
DECLARE @ncnt as NVARCHAR(100)
--Condition1
SET @rcnt =  'SELECT @Result=ISNUMERIC( (5918800.000 / 4963400.000) * (Slaughter(1023)) )'
--Condition2
SET @ncnt = 'SELECT @Result=ISNUMERIC( (5997200.000 / 5059900.000) * (400000.000) )'

DECLARE @ResultValue1 INT=0
DECLARE @ResultValue2 INT=0
DECLARE @ResultParam NVARCHAR(100)= '@Result int OUTPUT'

BEGIN TRY
EXEC sp_executesql @rcnt, @ResultParam, @Result=@ResultValue1 OUTPUT
END TRY
BEGIN CATCH
END CATCH

BEGIN TRY
EXEC sp_executesql @ncnt, @ResultParam, @Result=@ResultValue2 OUTPUT
END TRY
BEGIN CATCH
END CATCH

SELECT @ResultValue1
SELECT @ResultValue2