将每一行的字符串转换为Expression SQL

时间:2019-05-31 10:17:53

标签: sql math

您好,我为此进行了很多搜索,但找不到合适的解决方案。

让我们想象一个有以下查询

Select width, height, depth, formula from myTable

我想在公式中进行替换以进行转换 w变成宽度值 h转换为高度值 d变成深度值

,然后我想将这个结果字符串转换为: 将((1 + 2)* 3)转换为表达式,以便对其进行计算。

我使用

遇到了一些答案
exec ('select '+@expression)

但这不适用于每一行。我只是不能在选择内使用exec。 像这样

select 1 as col1, exec ('select '+@expression) as col2

甚至将字符串转换为表达式 像

Cast('1+1' as expression) 

我需要的最终结果很简单。跟随波纹管。

+-------+--------+-------+---------+--------+
| width | height | depth | formula | result |
+-------+--------+-------+---------+--------+
| 1     | 2      | 3     | (w+h)*d | 12     |
+-------+--------+-------+---------+--------+
| 2     | 1      | 3     | d+d*h   | 6      |
+-------+--------+-------+---------+--------+
| 3     | 3      | 1     | (d/4)*d | 0.25   |
+-------+--------+-------+---------+--------+

1 个答案:

答案 0 :(得分:0)

您无法在简单的查询中执行此操作,因为公式在每一行上都会更改。获得结果的一种方法是遍历表并分别执行每一行。像这样:

声明@sql nvarchar(max);

声明@id int = 0; 声明@maxid int;

从mytable中选择@maxid = max(id);

while @id < @maxid
begin
    select @sql = concat('select ', width, ' as width, ', height, ' as height, ', depth, ' as depth, ', formula, ' as value, ''', formula + ''' as formula',
                  ' from (select ', width, ' as w, ', height, ' as h, ', depth, 'as d) x')
    from mytable t
    order by id
    offset @id rows fetch next 1 row only;

    exec sp_executesql @sql;

    set @id = @id + 1;
end;

Here是db <>小提琴。