
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