J'ai besoin de convertir un champ varchar, à ce jour.
Mon varchar ressemble à ceci:
DATE(STR_TO_DATE(my_field, '%b %d %H:%i:%s +0000 %Y'))
J'ai besoin de:
SELECT DATE_FORMAT(STR_TO_DATE(my_field, '%b %d %H:%i:%s +0000 %Y'), '%Y-%m-%d') FROM my_tableLIMIT 1; +-------------------------------------------------------------------------- ----------+ | DATE_FORMAT(STR_TO_DATE(my_field, '%b %d %H:%i:%s +0000 %Y'), '%Y-%m-%d') | +-------------------------------------------------------------------------- ----------+ | NULL | +------------------------------------------------------------------------- ----------+ 1 row in set, 1 warning (0.00 sec)
Des idées?
J'ai essayé avec:
SELECT STR_TO_DATE(date_field, '%Y') FROM my_table LIMIT 1; +---------------------------------------+ | STR_TO_DATE(date_field, '%Y-%m-%d') | +---------------------------------------+ | NULL | +---------------------------------------+ 1 row in set, 1 warning (0.00 sec)
mais cela renvoie NULL.
EDIT - PLUS DE DÉTAILS:
Requête (string data_field) :
SELECT date_field FROM my_table LIMIT 1; +--------------------------------+ | date_field | +--------------------------------+ | Tue Jan 11 17:18:53 +0000 2011 | +--------------------------------+ 1 row in set (0.00 sec)
J'ai essayé:
DATE_FORMAT(STR_TO_DATE(my_field, '%Y-%m-%d'), '%Y-%m-%d') mydate
// Autre requête
2011-01-11
------- MODIFIER FINAL -------
SOLUTION !! YEYYY !!
Dans la réponse de @paul, il me recommande d'essayer ceci:
Jan 11 17:18:53 +0000 2011
Et cela fonctionne correctement! P >
Message pour tous les responsables de projets et développeurs:
NE JAMAIS enregistrer les dates dans les champs varchars SVP !!!!
Merci à tous!
4 Réponses :
Vous pouvez utiliser la requête suivante pour obtenir le résultat requis:
select TO_DATE('Jan 11 17:18:53 +0000 2011', 'Mon DD HH24:MI:SS +0000 YYYY')
Pour plus de formateurs, vous vous référez au lien suivant:
https://www.postgresql.org/docs/9.0/functions-formatting. html
La question est taguée avec mysql.
Si la partie +0000 est toujours la même et n'a pas d'importance, vous pouvez utiliser:
Specifier | Description
----------|------------
%b | Abbreviated month name (Jan..Dec)
%d | Day of the month, numeric (00..31)
%H | Hour (00..23)
%i | Minutes, numeric (00..59)
%s | Seconds (00..59)
%Y | Year, numeric, four digits
Les spécificateurs utilisés ici sont:
DATE(STR_TO_DATE(my_field, '%b %d %H:%i:%s +0000 %Y'))
Voir la liste complète des spécificateurs dans la documentation sous DATE_FORMAT ()
J'ai essayé ceci mais renvoie NULL SELECT DATE (STR_TO_DATE (mon_field, '% b% d% H:% i:% s +0000% Y'))
@AlexisCervetto Comment pourrais-je connaître % a ? Il n'y avait rien sur le jour de la semaine dans la version originale de votre question.
Je ne sais pas pourquoi hier% a fonctionné pour moi. En ce moment, j'exécute ma requête SQL et c'est vrai ..% b est correct, j'ai lu la documentation de DATE_FORMAT () et est l'attribut correct ... tellement fou!
Omg ... j'ai trouvé le problème X_X. J'ai deux formats de "dates" différents, comme "Tue Jan 11 17:18:53 +0000 2011" et "2011-10-03T18: 08: 21.000Z"
"J'ai deux" formats "de dates" différents - Félicitations ;-)
Je ne pense pas que +0000 soit un nombre fixe. donc j'utiliserais
Select STR_TO_DATE('Jan 11 17:18:53 +0000 2011','%b %e %H:%i:%s +%f %Y')
% f -> Microsecondes (000000..999999) J'ai plus le sentiment que +0000 indique les fuseaux horaires
% f fonctionne également avec des nombres à 4 chiffres. Mais le fuseau horaire est une bonne idée
SELECT DATE_FORMAT(STR_TO_DATE('Jan 11 17:18:53 +0000 2011 ', '%b %d %H:%i:%s +0000 %Y'), '%Y-%m-%d');
Veuillez ajouter quelques explications à votre réponse pour aider les autres à mieux la comprendre. Les réponses codées uniquement sont considérées comme impolies et peuvent ne pas aider le PO à comprendre le problème que vous essayez de résoudre.
Que fait le +0000 et que se passe-t-il s'il est +0010 (par exemple)
Je ne sais pas mais si c'est nécessaire, coupez cette partie de la ficelle. J'ai besoin de la date au format AAAA-mm-jj
Janest01et non06. Soit vous voulez direJun, soit le résultat doit être2011-01-11.J'ai essayé STR_TO_DATE (REPLACE (my_field, '+0000', ``), '% Y-% m-% d') mais retourne NULL
J'ai corrigé la date @PaulSpiegel mon mauvais ..
Que ce soit une leçon pour ne JAMAIS stocker un champ de date comme varchar.
@Eric Je suis développeur externalisé sur ce projet, c'est une pratique HORRIBLE, je sais! :(