Kategorien:

Datums- und Uhrzeitfunktionen

DATE_FROM_PARTS

Erstellt ein Datum aus einzelnen numerischen Komponenten, die Jahr, Monat und Tag des Monats darstellen.

Aliasse:

DATEFROMPARTS

Syntax

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

Argumente

Jahr

Der ganzzahlige Ausdruck, der bei Erstellung eines Datums als Jahr verwendet werden soll.

Monat

Der ganzzahlige Ausdruck, der bei Erstellung eines Datums als Monat verwendet werden soll, wobei Januar als 1 und Dezember als 12 dargestellt wird.

Tag

Der ganzzahlige Ausdruck, der bei Erstellung eines Datums als Tag verwendet werden soll, normalerweise im Bereich von 1 bis 31.

Nutzungshinweise

DATE_FROM_PARTS verarbeitet normalerweise Werte in „normalen“ Bereichen (z. B. Monate 1-12, Tage 1-31), kann aber auch Werte außerhalb dieser Bereiche verarbeiten. So können Sie zum Beispiel den N-ten Tag in einem Jahr auswählen, um bestimmte Berechnungen zu vereinfachen.

Jahres-, Monats- und Tageswerte können negativ sein, z. B. um ein Datum N Monate vor einem bestimmten Datum zu berechnen. Das Verhalten negativer Zahlen ist nicht ganz intuitiv. Weitere Informationen dazu finden Sie im Abschnitt „Beispiele“.

Beispiele

Komponenten in normalen Bereichen:

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

Komponenten außerhalb normaler Bereiche:

  • 100. Tag (ab dem 1. Januar 2010)

  • 24 Monate (ab dem 1. Januar 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                       |
+-------------------------------+----------------------------------+

Komponenten mit null oder negativen Zahlen:

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                   |
+-----------------------------+-----------------------------+------------------------------+
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                   |
+-----------------------------+-----------------------------+------------------------------+
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                    |
+-------------------------------+