O PostgreSQL nos fornece várias maneiras de obter o dia, mês e ano de uma data.
Três funções que vêm imediatamente à mente são;
DATE_PART()
, EXTRACT()
e TO_CHAR()
. EXTRACT()
O
EXTRACT()
função recupera subcampos como ano, mês, hora ou minuto, parte de um valor de data/hora. Exemplo:
SELECT EXTRACT(YEAR FROM date '2035-10-30');
Resultado:
2035
Podemos retornar diferentes partes da data em campos separados fazendo três chamadas separadas para esta função:
SELECT
EXTRACT(DAY FROM date '2035-10-30') AS "Day",
EXTRACT(DOW FROM date '2035-10-30') AS "DOW",
EXTRACT(DOY FROM date '2035-10-30') AS "DOY",
EXTRACT(MONTH FROM date '2035-10-30') AS "Month",
EXTRACT(YEAR FROM date '2035-10-30') AS "Year";
Resultado:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Aqui, retornei o dia do mês, o dia da semana, o dia do ano, o mês e o ano a partir da data.
Veja Como Extract() Funciona no PostgreSQL para mais exemplos e uma lista de nomes de campos que podem ser retornados por esta função.
DATE_PART()
O
DATE_PART()
função é equivalente a EXTRACT()
, mas com uma sintaxe ligeiramente diferente. SELECT
DATE_PART('DAY', date '2035-10-30') AS "Day",
DATE_PART('DOW', date '2035-10-30') AS "DOW",
DATE_PART('DOY', date '2035-10-30') AS "DOY",
DATE_PART('MONTH', date '2035-10-30') AS "Month",
DATE_PART('YEAR', date '2035-10-30') AS "Year";
Resultado:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Esta função requer que o primeiro argumento seja fornecido como uma string e uma vírgula separa os dois argumentos em vez do
FROM
palavra-chave. TO_CHAR()
O
TO_CHAR()
A função é mais flexível, na medida em que pode ser usada para fornecer uma variedade maior de saídas. Por exemplo, podemos usar esta função para retornar o dia, mês e ano em um campo:SELECT TO_CHAR(date '2045-12-02', 'Day, DDth Month YYYY');
Resultado:
Saturday , 02nd December 2045
Podemos usar o
fm
modificador de modelo para suprimir qualquer preenchimento que possa ser aplicado:SELECT TO_CHAR(date '2165-04-01', 'fmDay, fmDDth fmMonth YYYY');
Resultado:
Monday, 1st April 2165
Observe também que o
th
modificador de template é inteligente o suficiente para saber se st
, nd
, rd
, ou th
deve ser anexado. Aqui está um exemplo que usa várias chamadas para
TO_CHAR()
para gerar várias partes de data em campos separados:SELECT
TO_CHAR(date '2165-04-01', 'fmDay') AS "Day",
TO_CHAR(date '2165-04-01', 'fmDD') AS "DD",
TO_CHAR(date '2165-04-01', 'fmMonth') AS "Month",
TO_CHAR(date '2165-04-01', 'YYYY') AS "YYYY";
Resultado:
Day | DD | Month | YYYY --------+----+-------+------ Monday | 1 | April | 2165