Re: Getting number of days in a month
От | Guillaume Perréal |
---|---|
Тема | Re: Getting number of days in a month |
Дата | |
Msg-id | 38F57634.6CBE3408@lyon.cemagref.fr обсуждение исходный текст |
Ответ на | Re: Getting number of days in a month (Ken Causey <ken@premiernet.net>) |
Ответы |
Re: Getting number of days in a month
|
Список | pgsql-general |
Ken Causey wrote: > > Here's my perl implementation: > > ####################################### > # > # lastday( month, year (4 digit) ) > # > # Returns: last day of the month > # > ####################################### > > sub lastday { > my $month=shift; > my $year= shift; > > $month--; > > my @days = (31,0,31,30,31,30,31,31,30,31,30,31); > > if($days[$month] != 0){ > return $days[$month]; > } else { > # It's Feb, test for leap year > if($year % 4 != 0){ > return 28; > } elsif($year % 400 == 0){ > return 29; > } elsif($year % 100 == 0){ > return 28; > } else { > return 29; > } > } > } > > Ken Causey > ineffable > > At 02:26 PM 4/12/00 +0200, you wrote: > >To obtain the number of days in a month, I wrote this function: > > > >CREATE FUNCTION dayCountOfMonth(datetime) RETURNS float AS > >' DECLARE > > theDate ALIAS FOR $1; > > monthStart date; > > monthEnd date; > > BEGIN > > monthStart := DATE_TRUNC(''month'', theDate); > > monthEnd := monthStart + ''1 month''::timespan - ''1 day''::timespan; > > RETURN DATE_PART(''doy'', monthEnd) - DATE_PART(''doy'', monthStart) + 1; > > END; > >' LANGUAGE 'PL/pgSQL'; > > > >It seems to work, except with the month of October (10). > > > >dayCountOfMonth('1997-10-1') => 30 > >dayCountOfMonth('1998-10-1') => 30 > >dayCountOfMonth('1999-10-1') => 31 > >dayCountOfMonth('2000-10-1') => 30 > >dayCountOfMonth('2001-10-1') => 30 > >dayCountOfMonth('2002-10-1') => 30 > >dayCountOfMonth('2003-10-1') => 30 > >dayCountOfMonth('2004-10-1') => 31 > > > >Just one question: WHY?????? > >(Note: no trouble with February) > > > >Is there a function that give the number of days of a month? > > > >Thanks, > > > >Guillaume Perréal - Stagiaire MIAG > >Cemagref (URH), Lyon, France > >Tél: (+33) 4.72.20.87.64 > > > > Thanks, I rewrote my function to solve my problem. In fact, the problem is that ('2000-10-01'::datetime + '1 month'::interval) gives '2000-10-31' instead of '2000-11-01'. I think it's a bug, isn't it? Guillaume Perréal - Stagiaire MIAG Cemagref (URH), Lyon, France Tél: (+33) 4.72.20.87.64
В списке pgsql-general по дате отправления: