使用sp_executesql从临时表选择中的字段计算字符串



我有一个临时表,可以从中选择如下:

select 
testId
,testoutput
from 
#testResults

这会产生如下结果:

ID Result
1   4303
2   -150000*200*3= -90000000
3   4.2016
4   3205000

第二个值是由于我们的一些测试输出了计算结果,而不是为了在以后的报告中提高可读性。

我想把这个计算转换回一个数字,我相信通过sp_executesql是可行的。。。

我已将选择更改为:

select 
testId
,case
WHEN isnumeric(trim(testoutput)) = 1 THEN pr.expectedOutput
WHEN CHARINDEX('=', testoutput) != 0 then 
exec sp_executesql N'rtrim(left(testoutput, CHARINDEX(''='', testoutput) - 1))'
END                                                                         
from 
#testOuput

即,当有一个"="符号时,则拆分该符号的剩余部分,并尝试对其执行sp_executesql。

这引发了各种各样的语法错误,我无法理解。

如果能提供sp_executesql语法方面的任何帮助,我将不胜感激

您还可以提取计算结果:

不带TRIMTRY_PARSE的SQL Server

SELECT testId, CASE
WHEN ISNUMERIC(LTRIM(RTRIM(testoutput))) = 1 THEN pr.expectedOutput
WHEN CHARINDEX('=', testoutput) > 0 THEN
LTRIM(RTRIM(RIGHT(testoutput, CHARINDEX('=', REVERSE(testoutput))-1)))
END                                                                         
FROM #testOuput

带有TRIMTRY_PARSE的SQL Server

SELECT testId, CASE
WHEN TRY_PARSE(TRIM(testoutput) AS NUMERIC) IS NOT NULL THEN pr.expectedOutput
WHEN CHARINDEX('=', testoutput) > 0 THEN
TRIM(RIGHT(testoutput, CHARINDEX('=', REVERSE(testoutput))-1))
END                                                                         
FROM #testOuput

dbfiddle.uk上的演示

最新更新