Re: Function Help

From: Masaru Sugawara <rk73(at)echna(dot)ne(dot)jp>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Function Help
Date: 2001-09-28 23:17:50
Message-ID: 20010929081723.7680.RK73@echna.ne.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Brian C. Doyle <doyleb(at)corp(dot)earthlink(dot)net> wrote:

> I am working on a function to determine the date of the first saturday of
> the month.
>
> Currently I have:
>
> CREATE FUNCTION first_saturday(date)
> RETURNS date
> AS '
> Select CASE WHEN date_part(\'dow\',\'$1\'::DATE)=0 THEN date(\'$1\')+6
> WHEN date_part(\'dow\',\'$1\'::DATE)=1 THEN date(\'$1\')+5
> WHEN date_part(\'dow\',\'$1\'::DATE)=2 THEN date(\'$1\')+4
> WHEN date_part(\'dow\',\'$1\'::DATE)=3 THEN date(\'$1\')+3
> WHEN date_part(\'dow\',\'$1\'::DATE)=4 THEN date(\'$1\')+2
> WHEN date_part(\'dow\',\'$1\'::DATE)=5 THEN date(\'$1\')+1
> WHEN date_part(\'dow\',\'$1\'::DATE)=6 THEN date(\'$1\')+0
> END'LANGUAGE 'sql'
>
> I get an error that $1 is not a valid date. But I want that to be the
> variable I enter...
> what Am I doing wrong???

Hi,Brian.

It doesn't need the meta character \' that you write on both sides
of $1, so you get the error.
By the way, I think the following query is one of what you want.

CREATE FUNCTION first_saturday(date)
RETURNS date
AS '
SELECT (month.firstday
+ ((6 - date_part(''dow'', month.firstday))::text || '' day''
)::interval
)::date
FROM (select ($1::timestamp
- ((date_part(''day'', $1::timestamp)-1)::text
|| '' day''
)::interval
) AS firstday
) AS month
' LANGUAGE 'sql'
;

ex.

# select first_saturday('2001/9/28'::date);
first_saturday
----------------
2001-09-01

# select first_saturday('2001/10/28'::date);
first_saturday
----------------
2001-10-06

# select first_saturday('1999/9/28'::date);
first_saturday
----------------
1999-09-04

# select first_saturday('2010/9/28'::date);
first_saturday
----------------
2010-09-04

Regards.

------------------
Masaru Sugawara
rk73(at)echna(dot)ne(dot)jp

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Tatsuo Ishii 2001-09-29 00:21:45 Re: Problem with the accents
Previous Message Mark kirkwood 2001-09-28 22:33:58 Re: Migrating to DB2 from Postgres