PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como extrair o número da semana de uma data no PostgreSQL

Problema:


Você deseja obter o número da semana de um valor de data ou timestamp em um banco de dados PostgreSQL.

Exemplo:


Nosso banco de dados tem uma tabela chamada children com dados nas colunas id , first_name , last_name e birth_date .
id first_name last_name data_nascimento
1 Angela Michelin 2018-01-01
2 Martin Jackson 26-07-2002
3 Justin Clark 26-12-2010
4 Frank Barker 2008-06-08

Para cada criança, vamos obter seu primeiro nome, sobrenome e o número da semana de sua data de nascimento.

Solução 1:


Usaremos o DATE_PART() função. Aqui está a consulta que você escreveria:
SELECT first_name,
	 last_name,
       DATE_PART('week',birth_date) 
         AS  birth_week_number
FROM children;

Segue o resultado da consulta:
first_name last_name birth_week_number
Angela Michelin 1
Martin Jackson 30
Justin Clark 51
Frank Barker 23

Discussão:


Use o DATE_PART() função para recuperar o número da semana de uma data em um banco de dados PostgreSQL. Esta função recebe dois argumentos. O primeiro argumento é a parte da data a ser recuperada; usamos ‘week’, que retorna o número da semana (por exemplo, “1” para a primeira semana de janeiro, a primeira semana do ano). Você pode usar outra parte da data, como dia, ano, mês, hora, minuto, doy (o número do dia no ano), etc. Você pode aprender mais sobre partes da data na documentação do PostgreSQL.

O segundo argumento é um nome de coluna do tipo de dados date/timestamp/timestamptz ou uma expressão que retorna um desses tipos. (No nosso exemplo, é uma coluna da data tipo de dados.)

Quando usado com a parte de data 'semana', a função DATE_PART() retorna o número da semana como um número inteiro. Em nosso exemplo, o número da semana da data de nascimento da criança é exibido; nomeamos esta coluna birth_week_number . Martin Jackson nasceu em 2002-07-26 , então a função retorna '30' como o número da semana de sua data de nascimento.

DATE_PART() não é apenas uma maneira de obter o número da semana. Outra opção é usar o EXTRACT() função.

Solução 2:


Usaremos o EXTRACT() função. Aqui está a consulta que você escreveria:
SELECT first_name,
	 last_name,
       EXTRACT('week' FROM birth_date) 
         AS  birth_week_number
FROM children;

Esta função é semelhante a DATE_PART() . A diferença está na sintaxe:em vez de uma vírgula entre o nome da parte da data e a coluna/expressão, há a palavra-chave FROM. Além disso, o EXTRACT() função é padrão SQL. O resultado é o mesmo para ambas as funções.