Thread: evaluating equation stored in a string
I have equations stored in strings and I would need to evaluate them in pgsql - get the result. Maybe there is an eval() function but I couldn't find it. The only way I found was to use something like this: calcstring_arg:= 'SELECT ' || calcstring_arg || ' ::numeric AS outparam'; FOR tmp IN EXECUTE calcstring_arg LOOP END LOOP; RETURN tmp.outparam; However I have a problem with this cast. I don't know how to handle brackets in the equation, since SELECT 35/124 ::numeric --0.28.... while SELECT (35/124) ::numeric -- 0 so I should do something like SELECT (35::numeric/124::numeric) --0.28.... But than I would need to start to look inside the string and do manipulation to it that I would like to avoid. How could I evaluate these strings independently from whether there are brackets in them or not? Thanks for the help. Balázs
Hi : How about creating a view that converts integer into numeric? create view <name> as select <col1>::numeric as <col1>, select <col2>::numeric as <col2> ... and then query the view instead. This way your formula doesn't need to use cast anymore. ludwig lim --- SunWuKung <Balazs.Klein@t-online.hu> wrote: > I have equations stored in strings and I would need to > evaluate them in > pgsql - get the result. > Maybe there is an eval() function but I couldn't find it. > > The only way I found was to use something like this: > > calcstring_arg:= 'SELECT ' || calcstring_arg || ' > ::numeric AS > outparam'; > FOR tmp IN EXECUTE calcstring_arg LOOP END LOOP; > RETURN tmp.outparam; > > However I have a problem with this cast. I don't know how > to handle > brackets in the equation, since > > SELECT 35/124 ::numeric > --0.28.... > > while > > SELECT (35/124) ::numeric > -- 0 > > so I should do something like > > SELECT (35::numeric/124::numeric) > --0.28.... > > But than I would need to start to look inside the string > and do > manipulation to it that I would like to avoid. How could > I evaluate > these strings independently from whether there are > brackets in them or > not? > > Thanks for the help. > Balázs > > > ---------------------------(end of > broadcast)--------------------------- > TIP 3: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faq > __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
SunWuKung wrote: > However I have a problem with this cast. I don't know how to handle > brackets in the equation, since > > SELECT 35/124 ::numeric > --0.28.... > > while > > SELECT (35/124) ::numeric > -- 0 The brackets aren't your problem, your numbers aren't as accurate as the result you require. An eval() function would give the same results. You'll want this instead: SQL> select (35.0/124.0)::numeric; numeric ------------------------ 0.28225806451612903226 Regards, -- Alban Hertroys alban@magproductions.nl magproductions b.v. T: ++31(0)534346874 F: ++31(0)534346876 M: I: www.magproductions.nl A: Postbus 416 7500 AK Enschede // Integrate Your World //