PostgreSQL

Postgresql Generate_Series para criar uma série de datas

Postgresql Generate_Series para criar uma série de datas

Você deve estar familiarizado com a entrada de dados em qualquer sistema de gerenciamento de banco de dados. Ao inserir dados, você pode não ter tempo e precisa ignorar as lacunas em seus dados ou deseja alguma série consistente de registros. Nesta situação, PostgreSQL generate_series é aplicável para atingir o objetivo requerido. Como o nome indica, o mecanismo desta função contém 2 ou 3 entradas. eu.e., generate_series permite que você gere uma sequência de registros com um ponto de partida, ponto final e valor de incremento (opcional). Funciona principalmente em dois tipos de dados. eu.e., Inteiros e carimbos de data / hora. Para criar uma sequência de datas, a função generate_series é utilizada de diferentes maneiras.

Sintaxe:

>> Generate_series ([start], [stop], [optional step / interval]);

A descrição da sintaxe da consulta é a seguinte:

Vamos ter uma ideia de como a função generate_series () pode funcionar. Abaixo estão alguns exemplos elementares. Para entender o conceito desta função, precisamos instalar e abrir o shell de linha de comando postgreSQL (psql).

Após a configuração bem-sucedida e ao fornecer localhost, nome do banco de dados, número da porta e senha, podemos realizar qualquer consulta no psql.

Exemplo 01: Generate_series usando DATE mais operador inteiro

A consulta a seguir contém uma função incorporada “DATE” para buscar a data atual. Considerando que “a” é o operador fornecido. A função deste operador é adicionar aquele número específico (intervalo) na porção do dia da data. Ou seja, com intervalos específicos, os dias são deslocados e apresentados na data. Na saída, o intervalo “9” será adicionado a cada dia, i.e., 9 + 9 = 18, então 27, e assim por diante, até que a soma de 40 seja atingida.

>> SELECT current_DATE + s.a AS data FROM Generate_series (0,40,9) AS s (a);

Exemplo 02: Usando a data atual para gerar séries de datas

Para gerar séries de datas com a ajuda da data atual, estamos utilizando a função now (), que tira a data atual automaticamente do sistema. Você pode ver que a saída correspondente mostra a data em até 4 dias. Isso ocorre porque limitamos a execução adicionando 4 dias à data atual. Como fornecemos o intervalo de tempo para 1 dia, cada data será incrementada com 1 adição no dia

>> selecione * em generate_series (now (), now () + '4 dias', '1 dia');

Exemplo 03: Gerando série de datas usando carimbos de data / hora

Timestamps de horas: Esta função também usa o tipo de dados de carimbos de data / hora. O carimbo de data / hora é basicamente uma sequência de caracteres que fornecem a hora e a data de um dia relacionado. A função correspondente facilita o usuário em fornecer datas entre as duas datas que usamos para antecipar na consulta. A lista de carimbos de data / hora da data 7 a 11 com um carimbo de data / hora a cada 5 horas é obtida.

>> selecione * em generate_series ('2021-3-7 00:00' :: timestamp, '2021-3-11 12:00', '5 horas');

A consulta, conforme mencionado acima, também é usada para adicionar minutos e segundos com horas para obter um carimbo de data / hora melhor entre os dias do carimbo de data / hora relevante.

Timestamps de dias: No exemplo excedente, vimos que o carimbo de data / hora é usado para mostrar datas entre as duas respectivas datas que fornecemos com a alteração em horas incrementada em 5. No exemplo atual, veremos o carimbo de data / hora em dias. Os dias são incrementados com 2, pois iniciamos um intervalo de 2 dias na produção particular.

>> selecione * em generate_series ('2021-03-01' :: timestamptz, '2021-03-19' :: timestamptz, '2 dias');

Exemplo 04: Gerando datas específicas do mês usando date_trunc

Primeiro dia do mês

Se quisermos gerar a primeira data do mês atual usaremos a consulta anexada abaixo.A função distinta usada aqui é date_trunc, que trunca a data para a precisão fornecida.eu.e. agora()

>> selecione date_trunc ('mês', agora ());

      Último dia do mês

A mesma abordagem date_trunc irá gerar o último dia do mês.

>> selecione date_trunc ('mês', agora ()) + '1 mês' :: intervalo - '1 dia' :: intervalo como end_of_month;

Meio do mês

O meio do mês é obtido alterando na consulta anterior. Utilizaremos a função média para obter o respectivo objetivo. Ou vamos subtrair 17 dias do último.

>> selecione date_trunc ('mês', agora ()) + '1 mês' :: intervalo - '17 dias ':: intervalo como mid_of_month;

Exemplo 05: Gerando datas usando dados relacionados ao calendário

Aí vem o exemplo de uso de dados de calendário. Conheceremos o ano bissexto, eu.e., total de dias no mês de fevereiro."T" denota verdadeiro significa que o ano é um ano bissexto, e para "f" é falso "dow" representa os dias da semana. A coluna “Fev” contém o total de dias no mês. “Dia” denota o primeiro dia de janeiro de cada ano. De acordo com a pesquisa, semanas de ISO começam na segunda-feira, e a primeira semana de um ano contém 5 de janeiro do ano.

>> selecionar data :: data, extrair ('isodow' da data) como dow, to_char (data, 'dy') como dia, extrair ('ano iso' da data) como "ano iso", extrair ('semana' da data) como semana, extrair ('dia' de (data + intervalo '2 meses - 1 dia')) como fev, extrair ('ano' da data) como ano, extrair ('dia' de (data + intervalo ' 2 meses - 1 dia ')) = 29como salto de generate_series (data' 2010-01-01 ', data' 2020-03-01 ', intervalo' 1 ano ') como t (data);

Isodow é o dia da semana padrão “ISO”. A consulta será executada de 2010 a 2020 enquanto manipula cada mês, semana e dia do ano.

Exemplo 06: Gerando séries de datas específicas e número de dias na semana

Nesta consulta, adquiriremos datas e números de dias filtrando os dias de uma semana. Vamos considerar numericamente os dias da semana. Por exemplo, começando de 0 a 6. Onde 0 é domingo e 6 é sábado. Nesta consulta, você verá que aplicamos uma condição para trazer datas e números de dias que não estejam em 2 e 5. Por exemplo, em 20 de fevereiro, era sábado, então o número que apareceu é 6.

>> com dias como (selecione dd, extraia (DOW de dd) dw de generate_series ('2021-02-20' :: data, '2021-03-05' :: data, '1 dia' :: intervalo) dd ) selecionar * dias onde dw não está em (2,5);

Conclusão

O artigo, conforme mencionado acima, cobre a maioria das funcionalidades básicas relacionadas à geração de séries para criar séries de datas. Os exemplos detalhados discutidos em cada aspecto são tão significativos que aumentarão o conhecimento do seu respectivo artigo.

Top jogos do Oculus App Lab
Se você é proprietário de um fone de ouvido Oculus, deve estar informado sobre o carregamento lateral. Sideload é o processo de instalação de conteúdo...
Os 10 melhores jogos para jogar no Ubuntu
A plataforma Windows tem sido uma das plataformas dominantes para jogos devido à grande porcentagem de jogos que estão sendo desenvolvidos hoje para o...
5 melhores jogos de arcade para Linux
Hoje em dia, os computadores são máquinas sérias usadas para jogos. Se você não pode obter a nova pontuação máxima, você saberá o que quero dizer. Nes...