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.)
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.
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)
STR_TO_DATE vous permet de le faire, et il a un argument de format.
SELECT STR_TO_DATE(dateString, '%d/%m/%y') FROM yourTable...