eval function
| От | Sim Zacks |
|---|---|
| Тема | eval function |
| Дата | |
| Msg-id | 4E314577.8020208@compulab.co.il обсуждение исходный текст |
| Ответы |
Re: eval function
Re: eval function |
| Список | 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;
В списке pgsql-general по дате отправления: