web-dev-qa-db-fra.com

Convertir le format de date SQL? [jj.mm.aa à AAAA-MM-JJ]

existe-t-il une fonction mySQL pour convertir une date du format jj.mm.aa en AAAA-MM-JJ?

par exemple, 03.09.13 -> 2013-09-03.

11
user2216190

Puisque votre entrée est une chaîne sous la forme 03.09.13, Je suppose (puisque le 3 septembre 2013 est aujourd'hui) que c'est dd.mm.yy. Vous pouvez le convertir en une date en utilisant STR_TO_DATE :

STR_TO_DATE(myVal, '%d.%m.%y')

Ensuite, vous pouvez le reformater en une chaîne en utilisant DATE_FORMAT :

DATE_FORMAT(STR_TO_DATE(myVal, '%d.%m.%y'), '%Y-%m-%d')

Notez que l'année est %y ("y" en minuscules) dans STR_TO_DATE et %Y ("Y" majuscule) dans DATE_FORMAT. La version minuscule correspond aux années à deux chiffres et la majuscule aux années à quatre chiffres.

37
Ed Gibbs

Utilisation

SELECT CONCAT(
'20',
SUBSTR('03.09.13', 7, 2),
'-',
SUBSTR('03.09.13', 4, 2),
'-',
SUBSTR('03.09.13', 1, 2))

Violon démo .

Plus d'informations sur les formats que vous pouvez lire dans la page de manuel correspondante. Astuce: s'il s'agit d'une valeur de conversion à partir d'un champ non datetime, il vaut mieux utiliser à la place le type de données DATE/DATETIME. Cependant, c'est une mauvaise idée de fonctionner avec des dates via des fonctions de chaîne. Ci-dessus, il y a un bon truc avec STR_TO_DATE (ne répétera pas ce code, mis à jour pour s'adapter mieux)

4
Alma Do

Les dates sont stockées dans un format interne. Vous pouvez utiliser la fonction date_format() pour la convertir en chaîne en utilisant une variété de formats. Pour le vôtre en particulier:

select date_format(`date`, '%Y-%m-%d')
1
Gordon Linoff