将字符串中的算术公式转换为值

时间:2012-08-16 06:37:32

标签: sql-server tsql

我有一张表,其中所有条目都是算术公式(即1+2+3等)。

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

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

3 个答案:

答案 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 hereConvert 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