STR_TO_DATE() ET DATES....

Eléphanteau du PHP | 15 Messages

23 mars 2015, 20:05

Bonjour
j'ai un champ varchar avec des dates, pour des raisons internes je ne veux pas modifier ce champ en date.
mais je voudrai trier mes varchar...
je pense que l'on peut le faire avec des STR_TO_DATE() mais je ne sais pas ou commencer...
mon champ "date" est Quand1;
j'ai essayé ça avec des replace mais cela ne fonctionne pas... :oops:
$sql = 'SELECT count(Quand1) DESC,Heures1,Heures1bis,Quand1'
. ' FROM retenues '.$clause
. ' group by Quand1,Heures1 '
. ' ORDER BY (replace(Quand1,"/","")) DESC,Heures1 DESC limit 0,20';
une idée ?
merci

Mammouth du PHP | 688 Messages

23 mars 2015, 20:08

sous quelle format se présente la date dans ce champ de texte ?

Eléphanteau du PHP | 15 Messages

23 mars 2015, 20:15

13/03/2015 par ex

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

23 mars 2015, 23:20

Le soucis en faisant un tri sur une transformation de valeur, c'est que c'est très couteux pour le SGBD : il doit parser toute la table, modifier toutes les valeurs, stocker le calcul en mémoire, faire le tri, et retourner les valeurs.

La meilleure solution est de modifier le type du champs.
Si vraiment ce n'est pas possible, tu peux laisser le champs en varchar et créer un autre champ dans le "bon" type, mais je trouve ça un peu étrange :/
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 571 Messages

23 mars 2015, 23:30

j'avoue ne pas comprendre la raison qui te pousse à stocker une date dans un varchar.toutefois tu peux convertir ta chaîne date en type date:

Code : Tout sélectionner

ORDER BY STR_TO_DATE(Quand1,"%d/%m/%Y")
Sinon tu peux aussi créer une vue(une sorte de table virtuelle) à partir de la table.Avec phpmyadmin, tu crées une vue en lançant:

Code : Tout sélectionner

CREATE VIEW ma_vue as select Heures1,Heures1bis, STR_TO_DATE(Quand1,"%d/%m/%Y") FROM retenues;
Dans les scripts php tu interroges la vue à place de table pour afficher les données

Eléphanteau du PHP | 15 Messages

25 mars 2015, 15:53

merci pour ces réponses.
Je vais modifier mon champ....j'ai essayé sur une copie de la table de changer mon varchar en date, mais je perds toutes mes données.
Y a une solution dans mysql ?

Mammouth du PHP | 688 Messages

25 mars 2015, 16:01

oui affecter au nouveau champ STR_TO_DATE(Quand1,"%d/%m/%Y") plutôt que Quand1

Eléphanteau du PHP | 15 Messages

25 mars 2015, 16:12

j'ai trouvé si cela peut aider qq d'autre:
UPDATE ta_table
SET nouvelle_date = STR_TO_DATE(ancienne_date, '%d/%m/%Y')

Eléphanteau du PHP | 15 Messages

25 mars 2015, 16:14

=D> merci !!!!!!!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 mars 2015, 17:48

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton "Résolu" situé en haut de la page.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer