Обсуждение: Help with simple function
I need some help. I am trying to get a very simple function written to help our developers. Unfortunetly, the language we are developing in is giving us some grief over trying to do a "select to_char((current_date - inteval '1 day'),'yyyymmdd') into x". It is complaining about the use of the work interval.
Anyway, I thought, no problem, I'll just create a date increment and date decrement set of functions. However, I can not get them to work. Can someone please point out what is wrong?
CREATE OR REPLACE FUNCTION "public"."date_dec" (date, integer) RETURNS varchar AS'
declare
startDate alias for $1;
numDays alias for $2;
retDate varchar(8);
begin
select to_char((startDate - interval ''numDays day''),''yyyymmdd'') into retDate;
return retDate;
end;
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
When I try to run this, it complains about numDays - "Error: Bad interval external representation 'numDays day'". Is there anyway around this? I am trying to keep the function generic so that our developers can use it to calculate any date range.
Thanks for any help,
Chris
PG7.3.4 (8.1.1 upgrade happening next month)
Anyway, I thought, no problem, I'll just create a date increment and date decrement set of functions. However, I can not get them to work. Can someone please point out what is wrong?
CREATE OR REPLACE FUNCTION "public"."date_dec" (date, integer) RETURNS varchar AS'
declare
startDate alias for $1;
numDays alias for $2;
retDate varchar(8);
begin
select to_char((startDate - interval ''numDays day''),''yyyymmdd'') into retDate;
return retDate;
end;
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
When I try to run this, it complains about numDays - "Error: Bad interval external representation 'numDays day'". Is there anyway around this? I am trying to keep the function generic so that our developers can use it to calculate any date range.
Thanks for any help,
Chris
PG7.3.4 (8.1.1 upgrade happening next month)
Instead of: interval "numDays day" use: (numDays * (interval '1 day')) Also, note that in your "select to_char...." you have misspelled (sp?) interval as "inteval". And last but not least, you can do simple day addition and subtraction with dates using integers. For example: > select '2005-12-26'::date + 8; returns '2006-01-03'. However, I'm not sure if that will work with 7.3.x. Good luck with your 8.x install! Jason ________________________________ From: pgsql-admin-owner@postgresql.org [mailto:pgsql-admin-owner@postgresql.org] On Behalf Of Chris Hoover Sent: Wednesday, December 28, 2005 8:49 AM To: pgsql-admin@postgresql.org Subject: [SPAM] - [ADMIN] Help with simple function - Bayesian Filter detected spam I need some help. I am trying to get a very simple function written to help our developers. Unfortunetly, the language we are developing in is giving us some grief over trying to do a "select to_char((current_date - inteval '1 day'),'yyyymmdd') into x". It is complaining about the use of the work interval. Anyway, I thought, no problem, I'll just create a date increment and date decrement set of functions. However, I can not get them to work. Can someone please point out what is wrong? CREATE OR REPLACE FUNCTION "public"."date_dec" (date, integer) RETURNS varchar AS' declare startDate alias for $1; numDays alias for $2; retDate varchar(8); begin select to_char((startDate - interval ''numDays day''),''yyyymmdd'') into retDate; return retDate; end; 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; When I try to run this, it complains about numDays - "Error: Bad interval external representation 'numDays day'". Is there anyway around this? I am trying to keep the function generic so that our developers can use it to calculate any date range. Thanks for any help, Chris PG7.3.4 (8.1.1 upgrade happening next month)
On 12/28/05, Jason Minion <jason.minion@sigler.com> wrote:
That works like a charm. Thanks a bunch for the help.
Chris
And last but not least, you can do simple day addition and subtraction
with dates using integers. For example:
> select '2005-12-26'::date + 8;
returns '2006-01-03'. However, I'm not sure if that will work with
7.3.x. Good luck with your 8.x install!
Jason
That works like a charm. Thanks a bunch for the help.
Chris