Recherche sur un code postal avec SUBSTRING

Recherche sur un code postal avec SUBSTRING - SQL/NoSQL - Programmation

Marsh Posté le 15-10-2004 à 14:12:52    

Salut à tous!
Je cherche à trier les résultat d'une requête sur une table contenant les champs CODEPOSTAL et VILLE
Je voudrais trier ces résultat par département puis par ville.
J'ai donc essayé ça :

Code :
  1. SELECT * FROM ma_table ORDER BY SUBSTRING(CODEPOSTAL, 0, 2), VILLE ASC;


 
Mais un tri assez bizare  :pt1cable: le début semble correct puis par la suite, j'ai des code postaux qui s'insèrent pas à leur place... bref ma requête n'a pas l'air valide!
Jme suis planté où?


Message édité par toutoune le 15-10-2004 à 14:16:28
Reply

Marsh Posté le 15-10-2004 à 14:12:52   

Reply

Marsh Posté le 15-10-2004 à 14:32:56    

Tu tries des chaînes de caratères, pas des numériques, donc l'ordre lexicographique n'est pas le même.
 
A priori en tout cas.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 15-10-2004 à 14:57:23    

Exact faut convertir ton SUBSTRING(CODEPOSTAL, 0, 2)
en numérique depend de ton SGBD ...
 
... Order by num(SUBSTRING(CODEPOSTAL, 0, 2)) ...

Reply

Marsh Posté le 15-10-2004 à 19:10:10    

ah oui... c'est vrau que mon truc est pas logique!
j'ai essayé num() mais ça n'a pas l'air de passer.
Je l'utilise en MySQL avec PHP

Reply

Marsh Posté le 15-10-2004 à 19:16:50    

mais ce que je comprend pas, c'est que même en considérant les codes postaux comme des chaines, l'ordre lexicographique devrait marcher? Par ex., 59 est après 21 et apparement ça marche po...


Message édité par toutoune le 15-10-2004 à 19:16:58
Reply

Marsh Posté le 16-10-2004 à 15:56:32    

:??:

Reply

Marsh Posté le 16-10-2004 à 17:24:40    

Pour me répondre, il faut faire SUBSTRING(CODEPOSTAL, 1, 2)  et non pas SUBSTRING(CODEPOSTAL, 0, 2)
c'était tout!

Reply

Marsh Posté le 16-10-2004 à 20:15:25    

t'avais pas fait afficher le résultat du SUBSTRING pour vérifier ? :p

Reply

Marsh Posté le 16-10-2004 à 21:05:49    

Beegee a écrit :

t'avais pas fait afficher le résultat du SUBSTRING pour vérifier ? :p


si si, c'est comme ça que je m'en suis aperçu  :p

Reply

Marsh Posté le 18-10-2004 à 12:08:49    

Vérifie que les gens qui s'enregistrent dans l'AIN mettent bien 01000 dans la base, parceque sinon ton truc marchera pas...
 
Fait plutôt un :
 
ORDER BY ROUND(TO_NUMBER(CODEPOSTAL) / 1000, 0)


Message édité par Arjuna le 18-10-2004 à 12:09:05
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed