2

I have an SQL Query in PostgreSQL to extract doy (day of year) from dates. My query is:

select extract(doy from date_col) as n
from mytable
order by n

I want to turn it into a function like extract_doy(tablename, date_column_name).
How would I do that?

Erwin Brandstetter
  • 605,456
  • 145
  • 1,078
  • 1,228
f.ashouri
  • 5,409
  • 13
  • 44
  • 52
  • 1
    I think this could work: http://stackoverflow.com/questions/10705616/table-name-as-a-postgresql-function-parameter – hsan Feb 06 '13 at 14:05

1 Answers1

2

Assuming that you want to return a setof doubles, something like this should work:

CREATE OR REPLACE FUNCTION tmp_extract_doy(table_name text, column_name text) 
RETURNS SETOF DOUBLE PRECISION
AS
$BODY$
DECLARE
BEGIN
    RETURN QUERY EXECUTE format('SELECT EXTRACT(doy from %I) AS n FROM %I ORDER BY n', column_name, table_name);
END
$BODY$
  LANGUAGE plpgsql
  COST 100;
David S
  • 12,967
  • 12
  • 55
  • 93