web-dev-qa-db-fra.com

CAST MySQL comme DATE

J'essaie de comprendre ce que fait le cast d'une valeur au type DATE dans MySQL. Voici quelques choses que j'ai essayées:

SELECT CAST('3' AS DATE);
-- null

SELECT CAST(3 AS DATE);
-- null

SELECT CAST('2014-07-01 19:00:01' AS DATE);
-- 2014-07-01

SELECT DATE('2014-07-01 19:00:01');
-- 2014-07-01

SELECT CAST('2014-07-01' AS DATE);
-- 2014-07-01

SELECT DATE('2014-07-01');
-- 2014-07-01

SELECT CAST('2014-07-50' AS DATE);
-- null

SELECT DATE('2014-07-50');
-- null

SELECT DATE(''), CAST('' AS DATE), DATE(0), CAST(0 AS DATE);
-- null, null, 0000-00-00, 0000-00-00

Tout ce que j'ai essayé semble le convertir en null s'il n'est pas valide ou renvoyer la partie date de la chaîne s'il s'agit d'une date valide. J'ai même essayé des dates avec des barres obliques et d'autres formats, les mêmes résultats.

Quelle est la différence entre l'utilisation de la fonction DATE(expr) et la fonction CAST(expr AS DATE) ?

DATE(expr): extrait la partie date de l'expression date ou datetime expr.

CAST(expr AS type): la fonction CAST() prend une expression de n'importe quel type et produit une valeur de résultat d'un type spécifié, similaire à CONVERT()

De même, la même question peut être posée à propos des temps avec TIME(expr) et CAST(expr AS TIME).

26
rink.attendant.6

Vérification du code source de MySQL 5.6 CAST() et CONVERT() appelle la même fonction interne Item_date_typecast, DATE() appelle à Item_date_typecast aussi.

En conclusion il n'y a pas de différence entre la fonction DATE(expr) et la CAST(expr AS DATE).

Réfs:

https://github.com/mysql/mysql-server/blob/5.6/sql/sql_yacc.yy

https://github.com/mysql/mysql-server/blob/5.6/sql/item_create.cc

31
Ivan Cachicatari