IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Résultat étrange avec une expression régulière et un CAST


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre du Club
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Points : 60
    Points
    60
    Par défaut Résultat étrange avec une expression régulière et un CAST
    Bonjour à tous,

    J'ai un résultat étrange dans une requête et je n'arrive vraiment pas à comprendre ... peut-être quelqu'un aura une idée :

    J'ai un champ notes défini comme tel : note character varying(10). Ce champ peut donc contenir des notes numériques avec un caractère . comme séparateur de décimale ou du texte.

    Pour récupérer mes notes numériques je fais :
    Requete 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT note
    FROM notes
    WHERE note ~ E'^-??[0-9]*?(\\.[0-9]+?)??$';
    Ok, ça marche. Si j'ai les notes suivantes 10.2, 11, ABS je ne récupère que 10.2 et 11

    étape suivante je veux faire un cast de ces notes sous la forme d'un numérique car j'utilise ensuite le résultat dans une procédure stockée pl/sql :
    Requete 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT CAST (note AS numeric)
    FROM notes
    WHERE note ~ E'^-??[0-9]*?(\\.[0-9]+?)??$';
    Tout fonctionne correctement.

    Ensuite je rajoute une note 10A2 qui ne devrait pas correspondre à mon expression régulière.
    Ma requête 1 fonctionne correctement et renvoi bien seulement 10.2 et 11. Mon expression régulière fonctionne.

    Par contre si je fais la requête 2 avec le CAST j'ai un message d'erreur : syntaxe en entrée invalide pour le type numeric : « 10A2 »
    Et là je ne comprend pas ... Si c'était mon expression régulière qui était fausse la requête 1 devrais me retourner la valeur 10A2 mais ce n'est pas le cas.
    Autre hypothèse, le CAST est fait sur toutes les notes avant d'appliquer le filtre mais dans ce cas il devrait aussi mettre une erreur quand je n'avais que la note ABS.

    J'ai bien essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CAST (note AS numeric) FROM (
          SELECT note
          FROM notes
          WHERE note ~ E'^-??[0-9]*?(\\.[0-9]+?)??$') as notestmp;
    mais c'est pareil.

    Petite précision, j'ai l'erreur que quand j'exécute en pl/sql mais pas quand j'exécute en sql classique ...

    Une idée ???

  2. #2
    Membre du Club
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Points : 60
    Points
    60
    Par défaut
    Bon, j'ai trouvé la solution tout seul mais ça peut en intéresser certains :
    En fait quand je fais la requête 1 en SQL tout fonctionne correctement en SQL mais pas en pl/sql. En, pl/sql la procédure me renvoyait la note 10A2.

    Le problème venait de la chaine de l'expression régulière et plus précisément de l'échappement de \. Comme en pl/sql la procédure est déjà dans une chaine de caractère, pour mettre un \ dans l'expression régulière, à la création d'une fonction il faut mettre 4 \.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FAQ] Comment tester une chaîne de caractères avec une expression régulière ?
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 20/11/2007, 19h43
  2. Problème avec une expression régulière ?
    Par MaTHieU_ dans le forum Delphi
    Réponses: 1
    Dernier message: 28/04/2007, 18h50
  3. [RegEx] problème avec une expression régulière
    Par sissi25 dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 09h12
  4. [JMeter] Extraction avec une expression régulière
    Par LittleBean dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 04/04/2007, 17h39
  5. Problème avec une expression régulière
    Par Darkroro dans le forum Langage
    Réponses: 7
    Dernier message: 09/10/2006, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo