Categorias:

Funções de data e hora

DATE_FROM_PARTS

Cria uma data a partir de componentes numéricos individuais que representam o ano, o mês e o dia do mês.

Aliases:

DATEFROMPARTS

Sintaxe

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

Argumentos

year

A expressão inteira a ser usada como um ano para a construção de uma data.

month

A expressão inteira a ser usada como um mês para construir uma data, com janeiro representado como 1, e dezembro como 12.

day

A expressão inteira a ser usada como um dia para construir uma data, geralmente na faixa 1-31.

Notas de uso

DATE_FROM_PARTS é normalmente usado para lidar com valores em faixas “normais” (por exemplo, 1-12 meses, 1-31 dias), mas também lida com valores de fora dessas faixas. Isto permite, por exemplo, escolher o enésimo dia em um ano, que pode ser usado para simplificar alguns cálculos.

Os valores de ano, mês e dia podem ser negativos (por exemplo, para calcular uma data N meses antes de uma data específica). O comportamento dos números negativos não é totalmente intuitivo; consulte a seção Exemplos para obter detalhes.

Exemplos

Componentes em faixas normais:

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

Componentes fora da faixa normal:

  • Centésimo dia (a partir de 1.º de janeiro de 2010)

  • 24 meses (a partir de 1.º de janeiro de 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

Componentes com números zero ou negativos:

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