PostgreSQL Gereate_Series para criar uma série de data

PostgreSQL Gereate_Series para criar uma série de data

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 lacunas em seus dados ou deseja uma série consistente de registros. Nesta situação, o PostgreSQL Generate_Series é aplicável para atingir a meta necessária. Como o nome indica, o mecanismo desta função contém 2 ou 3 entradas. eu.e., Gereate_series permite gerar uma sequência de registros com um ponto de partida, ponto de rescisão e valor incrementador (opcional). Funciona principalmente em dois tipos de dados. eu.e., Inteiros e registros de data e hora. Para criar uma sequência de datas, a função Generate_Series é utilizada de maneiras diferentes.

Sintaxe:

>> generate_series ([start], [stop], [opcional step/interval]);

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

  • [[começar]: É o ponto de partida de gerar uma série.
  • [[parar]: Isso mostra o ponto em que a série vai parar.
  • [[intervalo]: O terceiro, mas o valor opcional implica quanto a série aumentará em cada etapa. O valor padrão para intervalos é 1.

Vamos ter uma idéia de como a função generate_series () pode executar. Abaixo estão alguns exemplos elementares. Para entender o conceito desta função, precisamos instalar e abrir o shell da 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 passar por qualquer consulta no PSQL.

Exemplo 01: Gereate_series usando o Date Plus Operator Inteiro

A consulta a seguir contém uma função interna de "data" para buscar a data atual. Enquanto "A" é o operador fornecido. A função deste operador é adicionar esse número específico (intervalo) na parte do dia da data. Ou em outras palavras, com intervalos específicos, os dias são deslocados e mostrados na data. Na saída, o intervalo "9" será adicionado todos os dias, eu.e., 9+9 = 18, então 27 e assim por diante, até que a soma de 40 seja alcançada.

>> selecione current_date + s.A como data de generate_series (0,40,9) como s (a);

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

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

>> Selecione * de generate_series (agora (), agora () + '4 dias', '1 dia');

Exemplo 03: Gerando séries de data usando timestamps

TIMESTAMPS DE HORAS: Esta função também usa o tipo de dados dos registros de data e hora. O registro de data e 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 ao fornecer datas entre as duas datas que costumávamos antecipar na consulta. A lista de registros de data e hora da data 7 a 11 com um registro de data e hora a cada 5 horas é obtido.

>> Selecione * FROM GERETE_SERIES ('2021-3-7 00:00' :: Timestamp, '2021-3-11 12:00', '5 horas');

A consulta, como mencionado acima, também é usado para adicionar minutos e segundos com horas para adquirir um melhor timestamp entre os dias de registro de data e hora relevantes.

TIMESTAMPS DE DIAS: No exemplo superior, vimos que o registro de data e hora é usado para mostrar datas entre as duas datas respectivas que fornecemos com a alteração em horas incrementadas por 5. No exemplo atual, veremos o registro de data e hora em dias. Os dias são incrementados com 2, pois iniciamos um intervalo de 2 dias na saída específica.

>> Selecione * FROM GERETE_SERIES ('2021-03-01' :: TimeSTampz, '2021-03-19' :: timeStampptz, '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 dada.eu.e. agora()

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

Último dia do mês

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

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

Meados do mês

Meados do mês são obtidos alterando -se na consulta anterior. Utilizaremos a função média para obter o respectivo objetivo. Ou subtrairemos 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 do uso de dados do calendário. Vamos conhecer o ano bisseiro, eu.e., Total de dias no mês de fevereiro.”T” indica verdadeiro significa que o ano é um ano bissexto e, para “f”, é falso “Dow” representa os dias da semana. A coluna "FEB" contém dias totais no mês. "Day" indica o primeiro dia de Jan de cada ano. Segundo pesquisas, semanas de ISO começam a partir de segunda -feira e a primeira semana de um ano contém 5 de janeiro do ano.

>> Selecione Data :: Data, Extract ('Isodow' da data) como Dow, to_char (data, 'dy') como dia, extrato ('ano ISO' a partir da data) como "ano ISO", extrato ('semana' A partir da data) na semana, extrato ('dia' (data + intervalo '2 meses - 1 dia')) como fevereiro, extrato ('ano' a partir da data) como ano, extrato ('dia' de (data + intervalo ' 2 meses-1 dia ')) = 29 como salto de generate_series (data' 2010-01-01 ', data' 2020-03-01 ', intervalo' 1 ano ') como t (data);

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

Exemplo 06: Gerando séries de datas e dias específicos na semana

Nesta consulta, adquiriremos datas e números diurnos filtrando dias em uma semana. Vamos considerar numericamente os dias da semana. Por exemplo, a partir 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 diurnos que não estão 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, Extract (Dow de DD) DW de Generate_Series ('2021-02-20' :: Data, '2021-03-05' :: Data, '1 dia' :: interval) ) selecione *nos dias em que DW não em (2,5);

Conclusão

O artigo, como mencionado acima, abrange a maioria das funcionalidades básicas relacionadas à geração de séries para criar séries de data. Exemplos detalhados discutidos em todos os aspectos são tão significativos que eles escalarão o conhecimento do seu respectivo artigo.