FAQ UDFConsultez toutes les sources

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

 
OuvrirSommaireAutres fonctions
 
Sélectionnez

CREATE OR REPLACE FUNCTION "public"."verifemail" (text) RETURNS boolean AS
$body$
/*
  Teste si l'email passé en parametre est valide ou non
  Exemple : SELECT verifemail('toto@wanadoo.fr'),verifemail('totowanado.fr')
            TRUE     FALSE
*/
SELECT $1 ~* '^[0-9a-z._-]+@[0-9a-z._-]+\\.[a-z]{2,4}$';
$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
Créé le 22 août 2005  par Damien Griessinger (HpAlpha)
 
Sélectionnez

CREATE OR REPLACE FUNCTION "public"."verifcb" (numero varchar) RETURNS boolean AS
$body$
/*
   Vérification d'un numéro de carte Bancaire
   Utilise l'algorithme de LUHN
   
   Exemple : SELECT verifcb('1234123412342');
             true
*/
DECLARE
 i integer;
 r integer = 0;
 val integer;
 etape  boolean = true;
BEGIN
 i:=length(numero);
 LOOP
  IF etape=true THEN
   val:=substring(numero from i for 1)::integer;
   etape:=false;
  ELSE
   val:=substring(numero from i for 1)::integer * 2;
   IF length(val::varchar)=2 THEN
     val:=substring(val::text from 1 for 1)::integer +
          substring(val::text from 2 for 1)::integer;
   END IF;
   etape:=true;
  END IF;
  r:=r+val;
  i:=i-1;
  EXIT WHEN i=0;
 END LOOP;
 return r%10=0;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
Créé le 20 août 2005  par Damien Griessinger (HpAlpha)
 
Sélectionnez


CREATE OR REPLACE FUNCTION "public"."validisbn" (numisbn text) RETURNS boolean AS
$body$
/*
  Teste la validité d'un numéro ISBN

  exemple : SELECT validisbn('2-7081-2829-9');
            True
*/

DECLARE
 unchar varchar(1);
 lavaleur integer;
 lechecksum integer;
 i integer;
 j integer;
BEGIN
 IF length(numisbn)!=13 THEN
  return false;
 END IF;

 unchar:=substring(numisbn from length(numisbn) for 1);

 IF Position(unchar IN '0123456789X')=0 THEN
  return false;
 END IF;

 IF unchar = 'X' THEN
  lechecksum:=10;
 ELSE
  lechecksum:=unchar::integer;
 END IF;

 j:=1;
 FOR i IN 1..11 LOOP
  unchar:=substring(numisbn from i for 1);
  IF position(unchar IN '0123456789')>0 THEN
   lechecksum:=lechecksum+unchar::integer*(11-j);
   j:=j+1;
  END IF;
 END LOOP;

 return lechecksum%11=0;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
Créé le 21 août 2005  par Damien Griessinger (HpAlpha)
 
Sélectionnez

CREATE OR REPLACE FUNCTION "public"."extraireemail" (text) RETURNS text AS
$body$
/*
   On extrait une adresse mail parmis un texte passé en parametre
 
   Exemple:  SELECT extraireemail('Voici le mail de Toto : toto@wanadoo.fr Chut, il faut pas le dire');
             toto@wanadoo.fr
*/
SELECT substring($1 from '([0-9a-zA-Z._-]+@[0-9a-zA-Z._-]+\\.[a-zA-Z]{2,4})');
$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
Créé le 22 août 2005  par Damien Griessinger (HpAlpha)
 
Sélectionnez

CREATE OR REPLACE FUNCTION "public"."extrairetelportable" (text) RETURNS text AS
$body$
/*
   Extrait un numero de portable (commencant par 06) à l'interieur d'un texte
 
   Exemple : SELECT extrairetelportable('Je te laisse mon tel : 06-99-97-96-95');
             06-99-97-96-95
*/
SELECT substring($1 from '(06.?([0-9]{2}.?){3}[0-9]{2})');
$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
Créé le 22 août 2005  par Damien Griessinger (HpAlpha)
 
Sélectionnez

CREATE OR REPLACE FUNCTION "public"."distancelonglat" (long_a numeric, lat_a numeric, long_b numeric, lat_b numeric) RETURNS numeric AS
$body$
/*
 Fonction permettant de calculer
 une distance orthodromique en kilomètres
 entre deux points A et B
 
 Arguments : long_a  (longitude du point a)
             lat_a   (latitude du point a)
             long_b  (longitude du point b)
             lat_b   (latitude du point b)
 
 retourne le nombre de km entre les 2 points
 
 Exemple : SELECT distancelonglat(2.266667,48.816667,2.30,48.75);
           7.79883901763468
           Il y 7.80 km entre Issy-les-Moulineaux et Antony
 */
BEGIN
 return 6366*acos(cos(radians(lat_a))*cos(radians(lat_b))*cos(radians(long_b)-radians(long_a))+sin(radians(lat_a))*sin(radians(lat_b)));
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
Créé le 20 août 2005  par Damien Griessinger (HpAlpha)
 
Sélectionnez

CREATE OR REPLACE FUNCTION create_pass(optx bpchar, int4 len)
  RETURNS "varchar" AS
$BODY$
/* 
 cree un password aleatoirement avec différents caractères suivant l'option placé en paramètre (optx) 
 et suivant le nombre de caractères placés en paramètre (len) :
 
 Exemple : SELECT create_pass('u', 6);
           AHTCVE
 
           SELECT create_pass('r',8)
           Ght6Kr4g
*/
DECLARE
        lo   int4;
        rng  int4;
        n    int4;
        xstr VARCHAR := '';
BEGIN
        IF    optx = 'u' THEN     -- Lettres MAJUSCULES
            lo := 65; rng := 26; -- ASCII 41 to 5A
        ELSIF optx = 'l' THEN     -- Lettres minuscules
            lo := 97; rng := 26; -- ASCII 61 to 7A
        ELSIF optx = 'a' THEN     -- Lettres
            lo := 65; rng := 58; -- ASCII 41 to 5A and 61 to 7A
        ELSIF optx = 'x' THEN      -- Lettres MAJUSCULES + chiffres
            lo := 48; rng := 43; -- ASCII 30 to 39 and 41 to 5A
        ELSIF optx = 'r' THEN      -- Lettres + chiffres
            lo := 48; rng := 75; -- ASCII 30 to 39 and 41 to 5A and 61 to 7A
        ELSIF optx = 'p' THEN     -- caractères imprimables (Lettres + chiffres + ponctuation)
            lo := 32; rng := 95; -- ASCII 20 to 7E
        ELSE
            lo := 65; rng := 26; -- (défault lettres MAJUSCULE)
        END IF;
        FOR i IN 1..len LOOP
            LOOP -- boucle qui exclut les caractères : 0, 1, I, O, i, j, l et o
      /* Renvoie un caractère ASCII au hasard */
      n := lo + TRUNC(rng * random()); -- entre lo et (lo + rng -1)
      EXIT WHEN NOT ((n BETWEEN 58 AND 64 OR n BETWEEN 91 AND 96) OR n IN(48, 49, 73, 79, 105, 106, 108, 111));
       END LOOP;
       xstr := xstr || chr(n);    -- Ajoute le caractère à la fin de la chaine
        END LOOP;
        RETURN xstr;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
Créé le 24 août 2005  par papy_tergnier
  

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.