Search Postgresql Archives

eval function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;




--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux