Вычислить строку из поля во временной таблице, выбранной с помощью sp_executesql - PullRequest
1 голос
/ 19 марта 2020

У меня есть временная таблица, из которой я могу выбрать следующее:

select 
    testId
    ,testoutput
from 
    #testResults

Это приводит к следующим результатам:

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

Второе значение из-за для некоторых из наших тестов выводят расчет, а не значение для удобочитаемости в более поздних отчетах.

Я хотел бы превратить это вычисление обратно в число, которое, я считаю, выполнимо через sp_execute sql ...

Я изменил свой выбор на:

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

то есть, когда есть знак "=", затем отрежьте то, что осталось от знака, и попытайтесь выполнить на нем c sp_execute sql.

Это вызывает все виды синтаксических ошибок, которые я не могу понять.

Буду очень признателен за любую помощь с синтаксисом sp_execute sql

1 Ответ

1 голос
/ 19 марта 2020

Вы также можете извлечь результат расчета:

SQL Сервер без TRIM или TRY_PARSE

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

SQL Сервер с TRIM и TRY_PARSE

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...