FAQ UDFConsultez toutes les sources

Nombre d'auteurs : 3, nombre de sources : 37, création le 1er mars 2013 

 
OuvrirSommaireFonctions sur les dates et heures
 
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;
 
Créé le 20 août 2005  par Damien Griessinger (HpAlpha), Frédéric Brouard
 
Sélectionnez

CREATE OR REPLACE FUNCTION "public"."estbissextile" (integer) RETURNS boolean AS
$body$

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%400=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%400=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%400=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)
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.