我有一个临时表,可以从中选择如下:
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语法方面的任何帮助,我将不胜感激
您还可以提取计算结果:
不带TRIM
或TRY_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
带有TRIM
和TRY_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上的演示