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→Autres fonctionsSé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%=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


