2010-11-10 8 views

Répondre

13

Vous pouvez utiliser la fonction STR_TO_DATE(str, format) MySQL.

Exemple déconnectant my_date_col pour un converti un:

BEGIN; 
ALTER TABLE `date_test` 
    ADD COLUMN `my_date_col_converted` DATE; 

UPDATE `date_test` 
    SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y'); 

ALTER TABLE `date_test` 
    DROP COLUMN `my_date_col`; 

ALTER TABLE `date_test` 
    CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE; 
COMMIT; 
+0

merci, je vais essayer ça! – stefano

+1

S'il vous plaît envisager de marquer l'une des réponses de sorte que nous savons que la question est fermée;) – conny

2

Vous pouvez utiliser STR_TO_DATE() de la façon suivante pour convertir votre texte dans un DATE:

STR_TO_DATE(datefield , "%d/%m/%Y") 

Si vous avez besoin de cette DATE dans un format spécifique, vous pouvez utiliser DATE_FORMAT().
Ceci est probablement pas nécessaire dans votre cas, mais voici un exemple complet:

DATE_FORMAT(STR_TO_DATE(datefield , "%d/%m/%Y") , "%Y/%m/%d") 

Ainsi, vous pouvez le faire sur toute la table avec une seule UPDATE pour remplacer les données actuelles avec les données remaniées (tout en gardant le type de données même):

UPDATE tableName 
SET originalDate = DATE_FORMAT(STR_TO_DATE(originalDate,"%d/%m/%Y"),"%Y/%m/%d"); 

Ou, si vous souhaitez convertir le type de données de la colonne DATE vous pouvez modifier la table pour créer une nouvelle colonne au format DATE, utilisez la mise à jour ci-dessus pour remplir cette colonne, enlever la colonne d'origine, et fr (éventuellement) renommer la nouvelle colonne en ancien nom.

ALTER tableName 
ADD modifiedDate DATE; 

UPDATE tableName 
SET modifiedDate = DATE_FORMAT(STR_TO_DATE(originalDate ,"%d/%m/%Y") ,"%Y/%m/%d"); 

ALTER tableName 
DROP COLUMN originalDate; 

ALTER tableName 
CHANGE COLUMN modifiedDate originalDate; 
+0

Son ne fonctionne pas ..pouvez-vous montrer une démonstration de violon. – user1896796

1

Cela devrait fonctionner, mais il ne fonctionne pas:

BEGIN; 
ALTER TABLE `date_test` 
    ADD COLUMN `my_date_col_converted` DATE; 
UPDATE `date_test` 
    SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y'); 
ALTER TABLE `date_test` 
    DROP COLUMN `my_date_col`; 
ALTER TABLE `date_test` 
    CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE; 
COMMIT; 

Aussi cela devrait fonctionner: ne fonctionne pas

UPDATE db_test SET anticipated_court_date = DATE_FORMAT(STR_TO_DATE(anticipated_court_date,"%d/%m/%Y"),"%Y-%m-%d"); 

Server version: 5.0.95-community-log MySQL Édition communautaire (GPL)

Cependant, cela fonctionne:

SELECT STR_TO_DATE('8/31/12', '%m/%d/%Y'); // WORKS 

Utilisation de MySQL - Je n'ai trouvé aucune solution fiable. Même la même date exacte n'a pas été convertie avec succès.

The solution I've found is this: PHP 
$user_date = "8/31/12"; // WORKS 
$mysql_date = date('Y-m-d H:i:s', strtotime($user_date)); 
0

Ce qui précède a été utile, mais ce qui suit a fonctionné pour moi sur Mysql.

ALTER TABLE `tablename` ADD `newcolumn` DATE NOT NULL ; 
UPDATE `tablename` SET `newcolumn`=STR_TO_DATE(`oldcolumn`, '%d/%c/%Y') 

Maintenant, supprimez l'ancienne colonne (si vous le souhaitez).

Questions connexes