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 :
Ok, ça marche. Si j'ai les notes suivantes 10.2, 11, ABS je ne récupère que 10.2 et 11
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]+?)??$';
é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 :
Tout fonctionne correctement.
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]+?)??$';
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 :
mais c'est pareil.
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;
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 ???
Partager