2010-02-03 7 views
1

J'utilise oracle 10. J'ai besoin de trier mon jeu de résultats en fonction de deux champs de chaînes numériques. un champ de critère de tri contient des données comme ceci: FIELD1:sql classement par chaîne numérique

FO-100001001001 
FO-100001002001 
FO-100001003001 
SQ-200001003001 
FC-102001003001 

l'autre:

FIELD2: 
000203 
000567 
349990 

Je dois combiner les deux critères, le premier critère prend la priorité, le résultat a besoin d'un croissant commande.

Comment écrire ce sql?

Répondre

6

Étant donné que les chiffres sont complétées par des zéros, vous pouvez simplement les comparer sous forme de chaînes:

SELECT ... 
FROM ... 
ORDER BY field1 ASC, field2 ASC 

Ou si vous voulez ignorer le préfixe dans field1:

SELECT ..., SUBSTR(field1, 3) AS stripped_field1 
FROM ... 
ORDER BY stripped_field1 ASC, field2 ASC 
0

Je suppose que par "chaîne numérique", vous voulez dire "varchar", et que le tri alphanumérique fonctionne pour vous (ce qui devrait être le cas si le format est fixé et que vous avez les zéros en tête).

select * from table order by field1, field2; 
Questions connexes