web-dev-qa-db-fra.com

Conversion d'une date dans MySQL à partir d'un champ chaîne

J'utilise un système dans lequel les dates sont stockées sous forme de chaînes au format dd/mm/yyyy. Est-il possible de convertir ceci en yyyy-mm-dd dans une requête SELECT (pour pouvoir utiliser DATE_FORMAT dessus)? MySQL a-t-il une fonction d'analyse de date?

Actuellement, la seule méthode à laquelle je peux penser est de concaténer un tas de sous-chaînes, mais j'espère qu'il existe une solution plus simple.

(Malheureusement, je ne peux pas convertir le champ en un champ de date vraie car il s'agit d'une méta-table: la même colonne contient des valeurs pour différents champs qui ne sont que des chaînes.)

58
DisgruntledGoat

Cette:

STR_TO_DATE(t.datestring, '%d/%m/%Y')

... convertira la chaîne en un type de données datetime. Pour vous assurer que le format souhaité est celui que vous désirez, utilisez DATE_FORMAT :

DATE_FORMAT(STR_TO_DATE(t.datestring, '%d/%m/%Y'), '%Y-%m-%d')

Si vous ne pouvez pas changer le type de données sur la colonne d'origine, je suggère créer une vue qui utilise le STR_TO_DATE appel pour convertir la chaîne en un type de données DateTime.

128
OMG Ponies

Oui, il y a str_to_date

mysql> select str_to_date("03/02/2009","%d/%m/%Y");
+--------------------------------------+
| str_to_date("03/02/2009","%d/%m/%Y") |
+--------------------------------------+
| 2009-02-03                           |
+--------------------------------------+
1 row in set (0.00 sec)
18
nos

STR_TO_DATE vous permet de le faire, et il a un argument de format.

4
monksy
SELECT STR_TO_DATE(dateString, '%d/%m/%y') FROM yourTable...
0
h4rp0