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 :
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...
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)

La requête 4 renvoie toutes les données possibles sauf
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
que la clause order by présente bien comme comprises entre mes deux valeurs.

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.