convertir la chaîne de date en champ DateTime mysql
J'ai un tas d'enregistrements avec des dates formatées comme une chaîne telle que '04/17/2009'
Je veux les convertir en un champ DateTime mysql
Je prévois d'utiliser une boucle foreach pour lire l'ancienne valeur de date et insérer la valeur nouvellement formatée dans un nouveau champ dans chaque enregistrement
Quel serait le meilleur moyen de convertir cette chaîne...Je pensais que php pourrait avoir un moyen de le faire automatiquement?
Merci
6 réponses
Tout d'abord, convertissez la chaîne en horodatage:
$timestamp = strtotime($string);
Puis faites un
date("Y-m-d H:i:s", $timestamp);
Si ces chaînes sont actuellement dans la base de données, vous pouvez ignorer php en utilisant la fonction STR_TO_DATE() de mysql.
Je suppose que les chaînes utilisent un format comme month/day/year
où month
et day
sont toujours à 2 chiffres, et year
est de 4 chiffres.
UPDATE some_table
SET new_column = STR_TO_DATE(old_column, '%m/%d/%Y')
Vous pouvez prendre en charge d'autres formats de la date en utilisant autres spécificateurs de format.
Utilisez DateTime:: createFromFormat comme ceci:
$date = DateTime::createFromFormat('m/d/Y H:i:s', $input_string.' 00:00:00');
$mysql_date_string = $date->format('Y-m-d H:i:s');
Vous pouvez l'adapter à n'importe quel format d'entrée, alors que strtotime() supposera que vous utilisez le format de date US si vous utilisez /, même si vous ne l'êtes pas.
Le 00:00:00 ajouté est parce que createFromFormat utilisera la date actuelle pour remplir les données manquantes, c'est-à-dire : il faudra l'heure actuelle:min:sec et non 00:00:00 Si vous ne le précisez pas.
$time = strtotime($oldtime);
, Puis utilisez date()
pour le mettre dans le bon format.
Je suppose que nous parlons de faire cela dans Bash?
J'aime utiliser sed pour charger les valeurs de date dans un tableau afin que je puisse décomposer chaque champ et faire ce que je veux avec. L'exemple suivant suppose et le format d'entrée de mm / JJ / AAAA...
DATE=$2
DATE_ARRAY=(`echo $DATE | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)
LOAD_DATE=$YEAR$MONTH$DAY
Vous pouvez également lire sur la commande date sous linux. Il peut être très utile: http://unixhelp.ed.ac.uk/CGI/man-cgi?date
J'espère que ça aide... :)
-Ryan
SELECT *
FROM table_name
WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) , '-', SUBSTRING( json_date, 7, 2 ) , '-', SUBSTRING( json_date, 3, 2 ) ) >= NOW();