我有一张表,其中所有条目都是算术公式(即1+2+3
等)。
在此表中,所有列均为varchar
类型。该表有很多这样的列。
我想计算公式并将值插入另一个。有关如何实现这一目标的任何建议?
答案 0 :(得分: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
您可以查看这些链接Similar question here和Convert string with expression to decimal
答案 1 :(得分:0)
按照链接 - Convert string with expression to decimal
创建函数DBO.EVAL后,只需运行: -
select dbo.eval(column_name) from table_name;
答案 2 :(得分: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