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, sinceSELECT 35/124 ::numeric
--0.28....while
SELECT (35/124) ::numeric
-- 0so 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?
__________________________________________________
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, sinceSELECT 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 //