Bonjour,
Je suis en présence d'un comportement surprenant lié au classement de données de type varchar2 : order by et les clauses de filtre ne semblent pas classer de la même manière.
Un exemple valant généralement mieux qu'un long discours, voici les requêtes dont les résultats me semblent peu cohérents :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 select numero_dossier from plop order by numero_dossier; select numero_dossier from plop where numero_dossier > 'MOA01' order by numero_dossier; select numero_dossier from plop where numero_dossier between 'MOA01' and '26082' order by numero_dossier; select numero_dossier from plop where numero_dossier between '26082' and 'MOA01' order by numero_dossier; select numero_dossier from plop where numero_dossier between '105340' and '26082' order by numero_dossier;
La première requête me fournit un certain nombre de résultats, ordonnés de la façon suivante :
Les requêtes 2 et 3 ne fournissent AUCUN résultat (alors que 'MOA01' semble être considéré comme la valeur la plus petite de ma donnée numero_dossier)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 MOA01 105340 105340 105340 105340 17470 22940/41 26080 26081 26082 26083 26084 26085 26087 26089 2706 2706 2706 etc...
La requête 4 renvoie toutes les données possibles sauf
que la clause order by présente bien comme comprises entre mes deux valeurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 105340 105340 105340 105340 17470 22940/41 26080 26081
La 5e et dernière requête renvoie, quant à elle, un résultat cohérent avec l'ordre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 105340 105340 105340 105340 17470 22940/41 26080 26081 26082
Quelqu'un aurait-il des explications à m'apporter par rapport à cette problématique ? des pistes de solution (sans remettre en cause la structure des données) ?
D'avance merci.
Partager