Tri sur une date au format dd/mm/yy

Fermé
hellwood - 27 avril 2009 à 11:55
 hellwood - 27 avril 2009 à 14:01
Bonjour,

voila j'ai un petit probleme pour réaliser un tri sur une date.
J'explique, je doit mettre a jour régulierement une table via un fichier csv en php, pas de souci.
Ce fichier contient un champs avec une date au format dd/mm/yy.
Résultat des courses je suis obligé de stocker cette date dans un champs de type texte ou autre mais pas de type date etant donné que mysql travail en yy/mm/dd.

Quelqun aurait t'il une idée pour faire un tri sur ce champs sans devoir modifier le fichier csv ??
A voir également:

13 réponses

Mmmmh je suppose qu'un tri par type va etre de mise... ce que je vais dire va etre grossier, mais c'est l'idée qu'il faut noter ^^

date = dd/mm/yy

tu peux faire un $cut_date = explode("/", $date); ce qui va te donner 3 tableaux $cut_date[]
ensuite tu peux imaginer un tri des $cut_date[].
Ou bien si tu ne dois pas remettre a jour ta base de donnée

UPDATE ma_table SET date = '$cut_date[2].$cut_date[1].$cut_date[0]' un truc dans ce style ?
2
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
27 avril 2009 à 13:28
Si tes valeurs sont déjà dans ta table, il te suffit simplement d'ajouter une colonne de type DATE.
ALTER laTable ADD COLUMN dateTemp DATE DEFAULT NULL;
Ensuite un UPDATE en prenant les valeurs de ta colonne date actuelle.
UPDATE laTable SET dateTemp = CONCAT(SUBSTRING(colonneDate, 7, 2), '-', SUBSTRING(colonneDate, 4, 2), '-', SUBSTRING(colonneDate, 1, 2));
Tu vérifies que tout s'est bien passé.
SELECT dateTemp, colonneDate FROM laTable;
Si ok, tu supprimes l'ancienne colonne de ta date.
ALTER laTable DROP colonneDate;
Et ensuite tu renommes dateTemp du nom de ta colonne et supprimes le DEFAULT NULL.
ALTER TABLE laTable CHANGE dateTemp colonneDate DATE NOT NULL;
Et après un simple ORDER BY pour trier selon cette colonne ;)
1
ok merci patachon, j'avais penser a travailler dans la table en créant une nouvelle collone, j'espere que modifier la structure de la table ne posera pas de probleme lors des mise à jour.
encore merci je vais creuser ton idée.
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85 > hellwood
27 avril 2009 à 13:37
Ah si, tu seras dorénavant contraint de formater correctement tes dates avant insertions.
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
27 avril 2009 à 12:03
tu veux faire le tri à quel moment ?

tu peux le faire dans ta requête directement
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
27 avril 2009 à 12:59
On peut savoir pourquoi tu ne stockes pas tes dates dans un type destiné à cet usage ?

Une date, ça se formate.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pour ThEBiShOp,

un tri directement dans la requete me pose justement probleme sur un champ qui a le format dd/mm/yy

car dans le cas d'un tri descendant par exemple : 12/04/2001 viendrait avant 12/01/2004

probleme qui ne se poserait pas si la date était dans le format yy/mm/dd
0
patachon, comment pourais-je formater une date qui est deja dans ce format dans le fichier texte?

ces fichiers texte sont généré par un autre programme, je ne peut donc pas formater mes dates dedans via excel par exemple.

L'idée de Borracho est interressante mais c'est deja du sacré boulot ...

- extraire toutes les mauvaises dates
- exploser les dates en les inversant dans un tableau
- procéder à une mise à jour en remettant juste les bonnes dates à la place des mauvaises dans la db.
0
pyfeu Messages postés 38 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 26 novembre 2009
27 avril 2009 à 13:35
Pourquoi tu ne changes pas toi même le format de la date lorsque tu la récupère? de manière à ce qu'elle soit du même format que en sql
0
pyfeu Messages postés 38 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 26 novembre 2009
27 avril 2009 à 13:40
Sinon tu commences par comparer l'année ensuite le moi puis le jour vu que le format est tout le temps le même il te suffit de récupérer les caractères de 0à2 puis de 3 à 5 puis de 6 à 8 avec la méthodes substr
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
27 avril 2009 à 13:50
Sauf que non, on ne met pas du café dans une boîte à sucre tout comme on ne met pas du sucre dans un pot à café.

Des types dates sont fournis, autant s'en servir non ?
0
raaah j'ai l'impression de lire tellement de solutions interressante ici, pourtant je ne sais plus quoi penser.
0
pyfeu Messages postés 38 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 26 novembre 2009
27 avril 2009 à 13:55
En même temps là il met des dates dans un string :s
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
27 avril 2009 à 13:56
il y a toujours beaucoup de solutions à un problème, il faut en essayer, si on arrive pas à savoir laquelle est la plus adaptée à notre soucis
0
je n'ai malheureusement pas le temps de tester les methodes aujourd'hui mais demain je vous tiendrais au courant.
0