Les meilleures sources PostgreSQL

Les meilleures sources PostgreSQLConsultez toutes les sources
Nombre d'auteurs : 4, nombre de sources : 38, dernière mise à jour : 20 juin 2005
Sommaire→Fonctions sur les dates et heures- Déterminer la date de Paque
- Déterminer si l'année est bissextile ou non
- Avoir la date du debut du mois
- Connaitre le nombre de jours dans le mois
- Connaitre le nombre de jours dans l'année
- Connaitre le numero de jour de l'année
- Connaitre le numero de semaine
- Tester si la date correspond au passage à l'heure d'été
- Teste si la date correspond au passage à l'heure d'hiver
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."datepaque" (annee integer) RETURNS date AS
$body$
/*
Retourne le jour de paque
Basé sur la fonction de SQLPro
SELECT datepaque(2005);
2005-03-27
*/
DECLARE
g integer;
i integer;
j integer;
c integer;
h integer;
l integer;
jourpaque integer;
moispaque integer;
dimpaque date;
BEGIN
g:=annee % 19;
c:=annee / 100;
h:=(c-c/4-(8*c+13)/25+19*g+15)0;
i:=h-(h/28)*(1-(h/28)*(29/(h+1))*((21-g)/11));
j:=(annee+annee/4+i+2-c+c/4)%7;
l:=i-j;
moispaque:=3+(l+40)/44;
jourpaque:=l+28-31*(moispaque/4);
dimpaque:=date(annee::text||'-'||moispaque::text||'-'||jourpaque::text );
return dimpaque;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Sélectionnez
CREATE OR REPLACE FUNCTION "public"."estbissextile" (integer) RETURNS boolean AS
$body$
/*
Teste si l'annee est bissextile
Exemple : SELECT estbissextile(2004);
TRUE
*/
SELECT ($1%4=0) AND (($1%100!=0) OR ($1@0=0));
$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 23 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."datedebmois" (date) RETURNS date AS
$body$
/*
Retourne la date du debut du mois
Exemple : SELECT datedebmois('2005-08-29');
2005-08-01
*/
SELECT (EXTRACT(YEAR FROM $1::date)||'-'||EXTRACT(MONTH FROM $1::date)||'-01')::date;
$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 30 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."joursdansmois" (date) RETURNS integer AS
$body$
/* Retourne le nombre de jours du mois
Exemple : SELECT joursdansmois('2004-02-11');
29
*/
DECLARE
jdansm CONSTANT int2[12] = '{31,28,31,30,31,30,31,31,30,31,30,31}';
mm int2;
r int2;
BEGIN
mm:=EXTRACT(MONTH FROM $1)::integer;
r:=jdansm[mm];
IF (mm=2) AND (EXTRACT(YEAR FROM $1)::integer%4=0) AND ((EXTRACT(YEAR FROM $1)::integer%100!=0) OR (EXTRACT(YEAR FROM $1)::integer@0=0)) THEN
r:=r+1;
END IF;
return r;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 30 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."nombrejoursannee" (date) RETURNS integer AS
$body$
/*
Retourne le nombre de jours dans l'annee
Exemple : SELECT nombrejoursannee('2005-08-29');
366
*/
SELECT CASE WHEN (EXTRACT(YEAR FROM $1)::integer%4=0) AND ((EXTRACT(YEAR FROM $1)::integer%100!=0) OR (EXTRACT(YEAR FROM $1)::integer@0=0)) THEN 365 ELSE 366 END;
$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 30 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."numerodejour" (date) RETURNS integer AS
$body$
/* Retourne le numero du jour
Exemple : SELECT numerodejour('2005-08-29');
241
*/
SELECT extract(doy from $1::date)::integer;
$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 30 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."numerosemaine" (date) RETURNS integer AS
$body$
/*
Retourne le numero de semaine
Exemple : SELECT numerosemaine('2005-08-29');
35
*/
SELECT EXTRACT(week FROM $1::date)::integer;
$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 30 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."passageheureete" (date) RETURNS boolean AS
$body$
/* Teste si la date correspond au passage à l'heure d'été
( dernier dimanche de mars )
Exemple : SELECT passageheureete('2005-04-02');
*/
DECLARE
m date;
BEGIN
m:=(EXTRACT(year FROM $1)||'-03-31')::date;
WHILE EXTRACT(dow FROM m)<>0 LOOP
m:=m-'1 day'::interval;
END LOOP;
return $1=m;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 30 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."passageheurehiver" (date) RETURNS boolean AS
$body$
/* Teste si la date correspond au passage à l'heure d'hiver
( dernier dimanche d'octobre )
Exemple : SELECT passageheurehiver('2005-10-30');
TRUE
*/
DECLARE
m date;
BEGIN
m:=(EXTRACT(year FROM $1)||'-10-31')::date;
WHILE EXTRACT(dow FROM m)<>0 LOOP
m:=m-'1 day'::interval;
END LOOP;
return $1=m;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 30 août 2005 par Damien Griessinger (HpAlpha)



