3

我有一个表格,其中所有条目都采用算术公式(即1+2+3等)的形式。

在此表中,所有列的类型均为varchar。该表有很多这样的列。

我想计算公式并将值插入另一个。关于如何实现这一目标的任何建议?

4

3 回答 3

3

你可以试试这个。我希望这可以帮助你。它从 t1 获取表达式并将结果放入 t2。您不想将 t1 设为实际表,因为它会从表中删除,因此您可以将实际表值复制到临时表中

declare @t as table(val varchar(20))
declare @t2 as table(val varchar(20))
insert into @t values
('1+3'),
('2*3'),
('9+3*2')


declare @exp varchar(20)
while(exists(select 1 from @t))
begin
    select top(1) @exp = val from @t

    insert into @t2
    exec ('select '+@exp)  

    delete top (1) from @t
end

select * from @t2

结果

val
------
4
6
15

您可以查看这些链接类似的问题hereConvert string with expression to decimal

于 2012-08-16T08:07:42.977 回答
0

按照链接 - 将带有表达式的字符串转换为十进制

创建函数 DBO.EVAL 后,只需运行:-

select dbo.eval(column_name) from table_name;
于 2012-08-16T07:30:40.373 回答
0

您可以声明两个表变量:

  • @tabformula其中将存储公式
  • @tabresult将在其中存储结果

有一个 ID 列将用于连接这两个表。

用所需的公式填充第一个表后,声明一个游标,然后执行formula并将结果存储到@tabresult表中。

declare @tabformula as table (id int identity(1,1), formula
varchar(200)) declare @tabresult as table (id int, result int)

insert into @tabformula(formula) values('1+4+6+7') ;
insert into @tabformula(formula) values('10+4+60+7'); 
insert into @tabformula(formula) values('1+4+6+70') ;
insert into @tabformula(formula) values('1+44+65+7');


declare c cursor for select ID,formula from @tabformula declare @id as
int declare @formula as varchar(200)

open c fetch c into @id,@formula while @@fetch_status=0 begin print
@formula insert into @tabresult (id,result) exec( 'select '+ @id +
','+@formula ) fetch c into @id,@formula end close c deallocate c
select T1.id,t1.formula,T2.result from @tabformula t1 inner join
@tabresult t2 on t1.id=t2.id
于 2016-09-05T15:45:18.920 回答