1

Bonjour,

je cherche a faire des tris de donnees stockees en varchar2 sous oracle920. le contenu peut commencer par une lettre ou par 0 ou par un chiffre.

est-il possible de faire un tri directement au niveau base de donnees ou dois-je passer par java? ou est-ce tout simplement pas possible sans monter une usine a gaz?
voici un exemple :
mon resultat:

3
T0
T01
T049
T1
T23
02
1
10
2

et je voudrais avoir quelque chose comme ca :


1
02
2
3
10
T0
T01
T049
T1
T23


Merci d'avance.
Shirine

2

ORDER BY [NomChamp]
Tout simplement
avatar

3

le probleme c'est que le resultat que j'obtient esty celui que je donne. donc il me faudrait trouver un moyen de changer ce resultat. existe-t-il une variable a utiliser dans oracle qui permette ca en utilisant un order by ? mais comme cela bute de fonderie le resultat n'est pas bon avec order by.

4

Je ne vois pas exactement ce que tu veux ? Tu peux montrer ta requête ?
avatar

5

SELECT E.ETAB_TXT_NOM,
T.TOUR_TXT_NUMERO,
T.TOUR_LNG_IDENT
FROM ETABLISSEMENT E, TOURNEE T
WHERE
T.ETAB_INT_CODE_CEN = E.ETAB_INT_CODE_CEN
ORDER BY
E.ETAB_TXT_NOM,
T.TOUR_TXT_NUMERO;

ma requete est la suivante. et le resultat:
TESTBP 3 48
TESTBP T0 40
TESTBP T01 41
TESTBP T049 44
TESTBP T1 42
TESTBP T23 43
TESTBP 02 49
TESTBP 1 45
TESTBP 10 47
TESTBP 2 46

la colonne qui pose probleme est celle du milieu. mais peut-etre que je ne peux pas le faire directement au niveau base.
je voudrais avoir 1,2,02,3,10 qui se suivent. et je suis obligee de mettre de l'alpha.

6

Bah cherche pas, la requête est bien triée pour de l'alpha... AMHA, il faut que tu fasses une procédure de tri externe, ou que tu changes 1 -> 01
avatar

7

oui je sais que pour de l'alpha c'est bien trie mais je cherchais s'il existait par un heureux hasard des options ou autres que je ne connaisse pas. je suis donc contrainte de faire une procedure de tri externe. je ne peux rien changer. ce que client souhaite ardemment, informaticien doit exaucerwink
n'etant pas tres calee, peux-tu me donner une piste pour commancer? tu parles de la faire en sql? ou par un autre langage? l'appli est en java. donc c'est sql ou java
merci pour ton aide.

8

(c'est vieux, mais c'est pas grave) un group by ne pourrait pas résoudre ton problème ?
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

9

Non, dans la mesure où c'est sa structure de donnée qui ne permet pas de faire ce qu'il veut.
avatar

10

ha voui, effectivement, j'avais pas vu la subtilité.

Un début de solution serait de "changer" un peu. C'est à dire de 0 à 9, rajouter un 0 devant (classique, 1 devient 01 ...)
problème : ca suffit pas.

Je regarderai ce qui peut se faire un de ces quatre, le problème me semble intéressant.
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

11

ORDER BY TO_NUMBER(LTRIM(T.TOUR_TXT_NUMERO,'T'))

devrait fonctionner :
+ Le LTRIM parcours ton TOUR_TXT_NUMERO de gauche à droite en supprimant la première occurence de 'T'
+ Le To_number fait exactemetn ce que son nom indique.

(Désolé, ça fais pas exactement ce que tu demandes. Je continue d'y reflechir, il suffirait par exemple de remplacer chaque occurence du 'T' par un préfixe numérique genre 99, pour être certain que les valeurs commençant par 'T' se trouvent à la fin)

Résultat :
lected
[code]ETAB_TXT_NOM TOUR_TXT_NUMERO TOUR_LNG_IDENT
------------ --------------- --------------
TESTBP       T0              40            
TESTBP       T01             41            
TESTBP       1               45            
TESTBP       T1              42            
TESTBP       02              49            
TESTBP       2               46            
TESTBP       3               48            
TESTBP       10              47            
TESTBP       T23             43            
TESTBP       T049            44            
10 rows se
[/code]
Cinq font un et un font cinq : le tout est UNITE.
C'est dans l'incompréhension que je suscite que je trouve ma raison d'être.
Je suis moi, et je le suis parce que les autres ne le sont pas, et que ce sont eux qui forment ma personne.
Inconscience et déraison sont source d'imagination.
Au delà de ma conscience et de mon inconscient, mes rêves créent la réalité.

12

On y est avec :
ORDER BY TO_NUMBER( REPLACE(T.TOUR_TXT_NUMERO,'T','99'))


lected
[code]ETAB_TXT_NOM TOUR_TXT_NUMERO TOUR_LNG_IDENT
------------ --------------- --------------
TESTBP       1               45            
TESTBP       02              49            
TESTBP       2               46            
TESTBP       3               48            
TESTBP       10              47            
TESTBP       T0              40            
TESTBP       T1              42            
TESTBP       T01             41            
TESTBP       T23             43            
TESTBP       T049            44            
10 rows se
[/code]


(je suppose que tu avais fait une petite erreur dans ta demande, et que tu veux bel et bien que le T049 se trouve apres le T23 !?)
Cinq font un et un font cinq : le tout est UNITE.
C'est dans l'incompréhension que je suscite que je trouve ma raison d'être.
Je suis moi, et je le suis parce que les autres ne le sont pas, et que ce sont eux qui forment ma personne.
Inconscience et déraison sont source d'imagination.
Au delà de ma conscience et de mon inconscient, mes rêves créent la réalité.

13

Un conseil pour trouver quelle fonction utiliser dans quelle situation :
http://wwwlsi.supelec.fr/www/yb/poly_bd/sql/tdm_sql.html
Cinq font un et un font cinq : le tout est UNITE.
C'est dans l'incompréhension que je suscite que je trouve ma raison d'être.
Je suis moi, et je le suis parce que les autres ne le sont pas, et que ce sont eux qui forment ma personne.
Inconscience et déraison sont source d'imagination.
Au delà de ma conscience et de mon inconscient, mes rêves créent la réalité.

14

ha ui, pas mal le lien. Bookmark ^@^
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

15

smeet :
(je suppose que tu avais fait une petite erreur dans ta demande, et que tu veux bel et bien que le T049 se trouve apres le T23 !?)

Non je crois que le T049 doit être avant le T23. Mais si tu remplaces ton "99" par un "9999.", ça doit marcher.
avatar
I'm on a boat motherfucker, don't you ever forget