Oracle
 sql >> Base de données >  >> RDS >> Oracle

tri des chaînes alphanumériques dans Oracle 11g

Ce que vous avez montré dans les ordres de question juste par la partie numérique de la valeur, vous verrez donc quelque chose comme :

TOKEN
------
BRIP.1
BRFL.1
BRBF.1
BR00.1
BRRF.1
BR00.2
BRRF.2
BRBF.2
BR00.3
BRRF.3
BR01.1
BR01.2
BR06.1
BR12.1
BR13.2
BR17.1
BR120 
BR121 
BR132 

Si vous souhaitez ordonner par les caractères alphabétiques, puis par les nombres à l'intérieur de ceux-ci, vous pouvez utiliser deux expressions dans l'ordre par clause - vous commandez donc par la première section alphabétique, puis par le nombre formé à partir de ce qui reste après tous les caractères alphabétiques sont supprimés :

select * from sortest
order by regexp_substr(token, '[[:alpha:]]*'),
  to_number(regexp_replace(token, '[[:alpha:]]', null));

TOKEN
------
BR00.1
BR00.2
BR00.3
BR01.1
BR01.2
BR06.1
BR12.1
BR13.2
BR17.1
BR120 
BR121 
BR132 
BRBF.1
BRBF.2
BRFL.1
BRIP.1
BRRF.1
BRRF.2
BRRF.3