From: | Sim Zacks <sim(at)compulab(dot)co(dot)il> |
---|---|
To: | PostgreSQL general <pgsql-general(at)postgresql(dot)org> |
Subject: | eval function |
Date: | 2011-07-28 11:18:15 |
Message-ID: | 4E314577.8020208@compulab.co.il |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
I need an eval function that will evaluate a valid SQL expression and
return the value.
I've seen variations of this asked before with no real answer.
I wrote a function to handle it, but it looks like there should be a
better way to do this (see below).
My use case is a table with date range definitions that should be
evaluated dynamically:
For example:
Period DateFrom
DateTo
Last Month $expr$current_date-interval '1 month'$expr$
$expr$current_date$expr$
...
select datefrom,dateto into v_datefrom, v_dateto from movingperiods
where period='Last Month';
select * from sales where orderdate between eval(v_datefrom)::date and
eval(v_dateto)
...
CREATE OR REPLACE FUNCTION eval(str text)
RETURNS text AS
$BODY$
declare
row record;
res text;
begin
if lower(str) in ('true','false') then
res:=str;
else
for row in execute 'select (' || str || ')::text as res1' loop
res:=row.res1;
end loop;
end if;
return res;
end;
$BODY$
LANGUAGE plpgsql VOLATILE;
From | Date | Subject | |
---|---|---|---|
Next Message | tommaso | 2011-07-28 11:51:59 | postgres unable to start |
Previous Message | Samba | 2011-07-28 11:03:26 | Statistics about Streaming Replication deployments in production |