FAQ UDF
FAQ UDFConsultez toutes les sources
Nombre d'auteurs : 3, nombre de sources : 37, création le 1er mars 2013
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