Mysql
 sql >> Base de données >  >> RDS >> Mysql

Créer des champs de date à partir du jour, du mois et de l'année dans MySQL

Lorsque vous avez des valeurs entières pour l'année, le mois et le jour, vous pouvez créer un DATETIME en combinant MAKEDATE() et DATE_ADD(). MAKEDATE() avec un jour constant de 1 vous donnera un DATETIME pour le premier jour de l'année donnée, puis vous pourrez y ajouter le mois et le jour avec DATE_ADD() :

mysql> SELECT MAKEDATE(2013, 1);
+-------------------+
| MAKEDATE(2013, 1) |
+-------------------+
| 2013-01-01        |
+-------------------+

mysql> SELECT DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH);
+---------------------------------------------------+
| DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH) |
+---------------------------------------------------+
| 2013-03-01                                        |
+---------------------------------------------------+

mysql> SELECT DATE_ADD(DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH), INTERVAL (11)-1 DAY);
| DATE_ADD(DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH), INTERVAL (11)-1 DAY) |
+----------------------------------------------------------------------------------+
| 2013-03-11                                                                       |
+----------------------------------------------------------------------------------+

Donc, pour répondre à la question de l'OP :

SELECT * FROM `date`
WHERE DATE_ADD(DATE_ADD(MAKEDATE(year, 1), INTERVAL (month)-1 MONTH), INTERVAL (day)-1 DAY)
BETWEEN '2013-01-01' AND '2014-01-01';