Catégories :

Fonctions de date et d’heure

DATE_FROM_PARTS

Crée une date à partir de composants numériques individuels qui représentent l’année, le mois et le jour du mois.

Alias :

DATEFROMPARTS

Syntaxe

DATE_FROM_PARTS( <year>, <month>, <day> )
Copy

Arguments

year

Expression entière à utiliser comme année pour construire une date.

month

Expression entière à utiliser comme mois pour la construction d’une date, janvier étant représenté par 1 et décembre par 12.

day

Expression entière à utiliser comme jour pour la construction d’une date, généralement comprise entre 1 et 31.

Notes sur l’utilisation

DATE_FROM_PARTS est généralement utilisé pour gérer des valeurs dans des plages « normales » (par exemple, mois 1-12, jours 1-31), mais il gère également des valeurs situées en dehors de ces plages. Cela permet, par exemple, de choisir le énième jour de l’année qui peut être utilisé pour simplifier certains calculs.

Les valeurs d’année, de mois et de jour peuvent être négatives (par exemple pour calculer une date N mois avant une date spécifique). Le comportement des nombres négatifs n’est pas entièrement intuitif ; voir la section Exemples pour plus de détails.

Exemples

Composants dans les plages normales :

SELECT DATE_FROM_PARTS(1977, 8, 7);
+-----------------------------+
| DATE_FROM_PARTS(1977, 8, 7) |
|-----------------------------|
| 1977-08-07                  |
+-----------------------------+
Copy

Composants hors des plages normales :

  • 100ème jour (à partir du 1er janvier 2010)

  • 24 mois (à partir du 1er janvier 2010)

SELECT DATE_FROM_PARTS(2010, 1, 100), DATE_FROM_PARTS(2010, 1 + 24, 1);
+-------------------------------+----------------------------------+
| DATE_FROM_PARTS(2010, 1, 100) | DATE_FROM_PARTS(2010, 1 + 24, 1) |
|-------------------------------+----------------------------------|
| 2010-04-10                    | 2012-01-01                       |
+-------------------------------+----------------------------------+
Copy

Composants avec un zéro ou des nombres négatifs :

SELECT DATE_FROM_PARTS(2004, 1, 1),   -- January 1, 2004, as expected.
       DATE_FROM_PARTS(2004, 0, 1),   -- This is one month prior to DATE_FROM_PARTS(2004, 1, 1), so it's December 1, 2003.
                                      -- This is NOT a synonym for January 1, 2004.
       DATE_FROM_PARTS(2004, -1, 1)   -- This is two months (not one month) before DATE_FROM_PARTS(2004, 1, 1), so it's November 1, 2003.
       ;
+-----------------------------+-----------------------------+------------------------------+
| DATE_FROM_PARTS(2004, 1, 1) | DATE_FROM_PARTS(2004, 0, 1) | DATE_FROM_PARTS(2004, -1, 1) |
|-----------------------------+-----------------------------+------------------------------|
| 2004-01-01                  | 2003-12-01                  | 2003-11-01                   |
+-----------------------------+-----------------------------+------------------------------+
Copy
SELECT DATE_FROM_PARTS(2004, 2, 1),   -- February 1, 2004, as expected.
       DATE_FROM_PARTS(2004, 2, 0),   -- This is one day prior to DATE_FROM_PARTS(2004, 2, 1), so it's January 31, 2004.
       DATE_FROM_PARTS(2004, 2, -1);  -- Two days prior to DATE_FROM_PARTS(2004, 2, 1) so it's January 30, 2004.
+-----------------------------+-----------------------------+------------------------------+
| DATE_FROM_PARTS(2004, 2, 1) | DATE_FROM_PARTS(2004, 2, 0) | DATE_FROM_PARTS(2004, 2, -1) |
|-----------------------------+-----------------------------+------------------------------|
| 2004-02-01                  | 2004-01-31                  | 2004-01-30                   |
+-----------------------------+-----------------------------+------------------------------+
Copy
SELECT DATE_FROM_PARTS(2004, -1, -1);  -- Two months and two days prior to DATE_FROM_PARTS(2004, 1, 1), so it's October 30, 2003.
+-------------------------------+
| DATE_FROM_PARTS(2004, -1, -1) |
|-------------------------------|
| 2003-10-30                    |
+-------------------------------+
Copy