excel里面的公式大家都很了解,形如 =sum(a1,a3:a8),if(m8<>0,n8/m8,0),a2+a9,sheet1!a5+b7 等等。
现在一项目需求,需要将excel的公式解析能oracle能识别的函数。
excel中,每一个单元格对应着表中的一条记录。
我也在写,同时供大家讨论一下,看是否有好的解决方案。
现在一项目需求,需要将excel的公式解析能oracle能识别的函数。
excel中,每一个单元格对应着表中的一条记录。
我也在写,同时供大家讨论一下,看是否有好的解决方案。
name value
aa 12
bb 13
cc 14
现在要设置计算公式要保存到起来
假如A=aa+bb=cc
或A=aa+(bb*cc)
等可以设置任意情况
我怎样才能根据设置的计算公式的到计算结果
保存计算公式的表怎样设计
谢谢了!急!!
create table test(name varchar(12),value int)
insert into test values('aa',12)
insert into test values('bb',13)
insert into test values('cc',14)create table temp(code varchar(30))
insert into temp values('aa+bb+cc' )
insert into temp values('aa+(bb*cc)')
go
declare @code varchar(30),@sql varchar(8000)declare tc cursor for select code from tempopen tcfetch next from tc into @codewhile @@fetch_status=0
begin
set @sql=''
select @sql=@sql+',['+name+']=max(case name when '''+name+''' then value end)' from test
set @sql='select '+@code+' from (select '+stuff(@sql,1,1,'')+' from test) t'
exec(@sql)
fetch next from tc into @code
endclose tc
deallocate tc
go
/*
-----------
39警告: 聚合或其它 SET 操作消除了空值。
-----------
194警告: 聚合或其它 SET 操作消除了空值。
*/
drop table test,temp
go
分解公式
将公式按运算分解到表中
*/
declare @str varchar(100)
declare @i int,@str1 varchar(10),@str2 varchar(10)set @str='3+7+12-13+8-9*123' --要分解的字符串
declare @tb table(num varchar(20),operation varchar(2)) --定义保存结果的表--公式分拆
set @i=patindex('%[^0-9]%',@str)
while @i>0
begin
select @str1=left(@str,@i-1)
,@str=substring(@str,@i,8000)
,@i=patindex('%[0-9]%',@str)
,@str2=left(@str,@i-1)
,@str=substring(@str,@i,8000)
,@i=patindex('%[^0-9]%',@str)
insert into @tb values(@str1,@str2)
end
if @str<>'' insert into @tb values(@str,'')--显示分拆结果
select * from @tb/*
num operation
-------------------- ---------
3 +
7 +
12 -
13 +
8 -
9 *
123 (所影响的行数为 7 行)
*/
谢谢楼上的几位。如果单单是四则运算还好说,问题是夹杂了诸如sum(d1,d3:d8)这样的函数,给解析带来的难度呈几何级增长。
excel里面公式的内容不能被直接解析吧。
结构如:
--基础表
create table e_base (tid number,--主键
trow number,--行
tcol varchar2(2),--列
tempid number,--模板id
tformula varchar2(1000) --公式
); insert into e_base values(1,9,'A',101,'YS(103,A,9)');
insert into e_base values(2,8,'B',101,'YS(101,A,9)');
insert into e_base values(3,4,'D',102,'YS(105,E,12)+YS(103,C,9)'); --结果表 create table e_result(
pid number,--主键
trow number,--行
tcol varchar2(2),--列
tempid number,--模板id
evalue number --值
);
没有什么好办法!!!!
http://topic.csdn.net/u/20081129/09/a40d6c90-fe46-4fe5-8739-386315e234f1.html
可采用整体生成语句的方法,使excel中的数据直接用执行sql的方式在Oracle中生成数据。
的确是个大专题啊!http://www.cnblogs.com/yiriqing/category/60608.html