2009-03-09 7 views
1

J'ai un champ VARCHAR dans une table Firebird 2.0 qui peut contenir des caractères alphanumériques. Je dois trier les données dans ce domaine, le tri de toutes les valeurs qui contiennent des chiffres des nombres, et trier toutes les autres valeurs comme 0.Firebird détermine si une chaîne est composée de tous les nombres

Par exemple, si j'ai quatre valeurs,

"1", "2", "10", "string", 

Je dois trier comme

"string", "1", "2", "10". 

tri par défaut avec des sortes de chaînes comme

"1", "10", "2", "string". 

Je pensais la conversion des valeurs en INTEGER, mais j'obtiens une erreur de conversion sur les chaînes, ce qui est bien sûr correct. Comment travailler autour de cela?

Répondre

1

Vous pouvez utiliser la fonction builtin LPAD:

SELECT 
    ... 
    <number_field>, 
    ... 
FROM 
    ... 
ORDER BY 
    LPAD(<numer_field>, 10) 
0

Créez une colonne supplémentaire dans laquelle vous stockez des valeurs triables à l'aide de votre application. Ensuite, faites le tri en fonction de cette colonne. Si vous voulez que vos chiffres soient à la fin, insérez "ZZZ" (ou "ÜÜÜ" ou tout autre caractère dans votre langue) devant les chiffres. Comme Format ("ZZZ% 012d", my_num);

Questions connexes