J'ai importé un fichier CSV dans mysql avec dates jj/mm/aaaa Maintenant besoin d'une requête pour le convertir du format texte au format date yyy-mm-ddrequête sql convertir champ de texte jj/mm/aaaa à date champ aaaa-mm-jj
Vive
S.
J'ai importé un fichier CSV dans mysql avec dates jj/mm/aaaa Maintenant besoin d'une requête pour le convertir du format texte au format date yyy-mm-ddrequête sql convertir champ de texte jj/mm/aaaa à date champ aaaa-mm-jj
Vive
S.
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;
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;
Son ne fonctionne pas ..pouvez-vous montrer une démonstration de violon. – user1896796
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));
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).
merci, je vais essayer ça! – stefano
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