par
Cyrano » 04 sept. 2011, 17:26
De mon point de vue, tu as tout intérêt a ajouter un champ date, copier tes données par un update

+1
J'ajouterais même qu'un UPDATE n'aurait en l'occurrence rien de compliqué :
UPDATE ta_table
SET ton_champ_date = CAST(CONCAT(
SUBSTR(ton_champ_text, 7),
'-',
SUBSTR(ton_champ_text, 4, 2),
'-',
SUBSTR(ton_champ_text, 1, 2)
) AS DATE);
Ça va transformer un « 04/09/2011 » en « 2011-09-04 » avec le bon type, encore que le CAST dans ce cas là ne soit pas nécessairement indispensable, il faudrait vérifier, je n'ai pas testé, mais c'est la version que j'essayerais en premier. Et comme il n'y a pas de clause WHERE, ça va affecter intégralement toutes les lignes de la table.
Et là tu pourrais disposer de toutes les fonctions natives du SGBD pour trier sur les dates.
J'ajoute que si tu veux récupérer une date « 2011-09-04 » au format « 04/09/2011 », tu disposes avec MySQL de la fonction DATE_FORMAT, ça donnerait ceci :
mysql> SELECT DATE_FORMAT(CAST('2011-09-04' AS DATE), '%d/%m/%Y') as ma_date_fr;
+------------+
| ma_date_fr |
+------------+
| 04/09/2011 |
+------------+
1 row in set (0.00 sec)
Pour illustrer l'exemple, j'ai fait un CAST sur une chaîne de caractère pour que la valeur soit traitée comme une date. Dans ta requête, remplace par le nom de ta colonne comme ceci :
SELECT DATE_FORMAT(ton_champ_date, '%d/%m/%Y') as ma_date_fr;
Ce sera infiniment plus efficace

[quote="Ryle"]De mon point de vue, tu as tout intérêt a ajouter un champ date, copier tes données par un update ;)[/quote]
+1
J'ajouterais même qu'un UPDATE n'aurait en l'occurrence rien de compliqué :
[sql]UPDATE ta_table
SET ton_champ_date = CAST(CONCAT(
SUBSTR(ton_champ_text, 7),
'-',
SUBSTR(ton_champ_text, 4, 2),
'-',
SUBSTR(ton_champ_text, 1, 2)
) AS DATE);
[/sql]
Ça va transformer un « 04/09/2011 » en « 2011-09-04 » avec le bon type, encore que le CAST dans ce cas là ne soit pas nécessairement indispensable, il faudrait vérifier, je n'ai pas testé, mais c'est la version que j'essayerais en premier. Et comme il n'y a pas de clause WHERE, ça va affecter intégralement toutes les lignes de la table.
Et là tu pourrais disposer de toutes les fonctions natives du SGBD pour trier sur les dates.
J'ajoute que si tu veux récupérer une date « 2011-09-04 » au format « 04/09/2011 », tu disposes avec MySQL de la fonction DATE_FORMAT, ça donnerait ceci :
[sql]mysql> SELECT DATE_FORMAT(CAST('2011-09-04' AS DATE), '%d/%m/%Y') as ma_date_fr;
+------------+
| ma_date_fr |
+------------+
| 04/09/2011 |
+------------+
1 row in set (0.00 sec)[/sql]
Pour illustrer l'exemple, j'ai fait un CAST sur une chaîne de caractère pour que la valeur soit traitée comme une date. Dans ta requête, remplace par le nom de ta colonne comme ceci :
[sql]SELECT DATE_FORMAT(ton_champ_date, '%d/%m/%Y') as ma_date_fr;[/sql]
Ce sera infiniment plus efficace :)