PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 22/10/2015 11:27:55

Papychampi
Membre

[FONCTION] - Variable prise pour une colonne...

Informations Utiles:

Version: 9.4

Logiciel: PgAdminIII

Autre langage: PHP / Javascript



Message:

Bonjour à tous,

J'ai une petite fonction qui marcherais si ma variable était reconnue comme telle et pas comme une colonne... En gros cette fonction permet de vérifier le formatage d'un numéro de série...

CREATE OR REPLACE FUNCTION check_sn("_SN" text)
  RETURNS boolean AS
$BODY$BEGIN
    IF ('^[A-Z]{2}\#[0-9]{2}[0-5][0-9][A-D4][A-F][0-9]{3}[A-F0-9]{4}$' ~ _SN)
    THEN
        RAISE LOG 'Checking SN: OK!';
        RETURN true;
    ELSE
        RAISE LOG 'Checking SN: FAILED!';
        RETURN false;
    END IF;
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION check_sn(text)
  OWNER TO postgres;

Hors ligne

#2 22/10/2015 11:30:28

gleu
Administrateur

Re : [FONCTION] - Variable prise pour une colonne...

Vous l'avez déclaré en tant que "_SN" et vous l'utilisez en tant que _SN (donc dans la parlance PG, _sn). Pas étonnant qu'il ne soit pas d'accord smile


Guillaume.

Hors ligne

#3 22/10/2015 11:47:59

Papychampi
Membre

Re : [FONCTION] - Variable prise pour une colonne...

Bonjour,

Déjà merci de votre réponse. Je voudrais juste savoir parce que ça m'intrigue pas mal aussi c'est que ma RegEx retourne toujours false... Même pour des chaines de caractères qui sont correctes...

Du genre celle ci:
    AZ#2323BA765AEF4

Du coup pour que vous puissiez m'aider voici comment c'est fait:

NN#YYWWTFVVVDDDD

NN : A à Z
YY : 0 - 9
WW : 0-5 puis 0-9
T: A à D ou 4
F: A à F
VVV: 0 à 9
DDDD A à F / 0 à 9

Hors ligne

#4 22/10/2015 11:56:44

rjuju
Administrateur

Re : [FONCTION] - Variable prise pour une colonne...

Tout simplement, le pattern doit être à droite :

# select '^[A-Z]{2}\#[0-9]{2}[0-5][0-9][A-D4][A-F][0-9]{3}[A-F0-9]{4}$' ~ 'AZ#2323BA765AEF4';
 ?column? 
══════════
 f
(1 row)

# select 'AZ#2323BA765AEF4' ~ '^[A-Z]{2}\#[0-9]{2}[0-5][0-9][A-D4][A-F][0-9]{3}[A-F0-9]{4}$';
 ?column? 
══════════
 t

Hors ligne

Pied de page des forums