Função DATEDIF

Calcula a diferença entre dois valores de data válidos para as unidades de medida especificadas.
  • As entradas precisam ser referências de coluna.
  • O primeiro valor é usado como a linha de base para comparar os valores de data.
  • Os resultados são calculados para o valor inteiro mais próximo e menor que o total exato. Os valores decimais restantes são descartados.

Uso básico

derive type:single value:DATEDIF(StartDate, EndDate, month)

Saída: gera uma coluna de valores que calcula o número de meses completos decorridos entre StartDate e EndDate.

Sintaxe

derive type:single value:DATEDIF(date1,date2,date_units )

ArgumentoObrigatório?Tipo de dadosDescrição
date1Sdata/horaData de início para comparar
date2SdatetimeData final para comparar
date_unitsSstringLiteral de string que representa as unidades de data para usar na comparação

Para mais informações sobre os padrões de sintaxe, consulte Notas de sintaxe da documentação da linguagem.

date1, date2

Valores de data a serem comparados usando as unidades date_units. Se date2 > date1, os resultados serão positivos.

  • Os valores de data precisam ser referências de coluna.
  • Se date1 e date2 tiverem uma diferença de fuso horário especificada, DATEDIF calculará essa diferença, inclusive de fuso horário.
  • Se date1 não tiver um fuso horário especificado, mas date2 tiver, DATEDIF usará a hora local no mesmo fuso horário de date2 para calcular a diferença. DATEDIF retorna a diferença sem a diferença de fuso horário.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimString (referência de coluna de data)LastContactDate

date_units

Unidade de medida da data a ser calculada entre as duas datas válidas.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimStringyear

Valor aceito para unidades de data:

  • year
  • quarter
  • month
  • dayofyear

  • week
  • day
  • hour
  • minute
  • second
  • millisecond

Exemplos

Exemplo: pedidos vencidos

Este exemplo ilustra como usar a função DATEDIF para calcular o número de dias decorridos entre a data do pedido e a data atual para fins de informação do cliente.

Fonte:

Para os pedidos no conjunto a seguir, você quer cobrar juros pelos que têm mais de 90 dias.

OrderIdOrderDateValor
100131/01/161000
100215/11/151000
100318/12/151000
100415/01/161000

Transformação:

O primeiro passo é criar uma coluna contendo o valor da data de hoje (16/03/16):

derive type:single value:TODAY() as:'Today'

Agora você pode usar esse valor como base para calcular o número de dias decorridos para cada fatura:

derive type:single value:DATEDIF(OrderDate, Today, day)

A idade de cada fatura em dias é exibida na nova coluna. Agora, você quer adicionar um pouco de informação a essa comparação. Em vez de apenas calcular o número de dias, você pode escrever a ação a ser realizada. Substitua a instrução acima por esta:

derive type:single value:IF((DATEDIF(OrderDate, Today, day) > 90),'Charge interest','no action') as:'TakeAction'

Para ser justo com seus clientes, você quer avisá-los quando a fatura estiver pendente há 45 dias. Você pode substituir a instrução acima por esta:

derive type:single value:IF(DATEDIF(OrderDate, Today, day) > 90,'Charge interest',IF(DATEDIF(OrderDate, Today, day) > 45),'Send letter','no action')) as: 'TakeAction'

Ao usar instâncias aninhadas da função IF, você pode gerar vários resultados na coluna TakeAction.

Para itens com mais de 90 dias, você quer cobrar 5% de juros. A instrução pode ser igual a esta:

set col:Amount value:IF(TakeAction == 'Charge interest',Amount * 1.05,Amount)

A instrução acima define o valor na coluna Amount avaliando se o valor da coluna TakeAction é Charge interest. Em caso afirmativo, serão aplicados 5% de juros sobre o valor na coluna Amount.

Resultados:

OrderIdOrderDateValorHojeTakeAction
100131/01/16100003/03/16Nenhuma ação
100215/11/15105003/03/16Cobrar juros
100318/12/15100003/03/16Enviar carta
100415/01/16100003/03/16Enviar carta

Exemplo: cálculos de dayofyear

Este exemplo demonstra como dayofyear é calculado usando-se a função DATEDIF, mais especificamente como anos bissextos e dias úteis são tratados. Abaixo, você pode consultar algumas datas de exemplo. O ano de 2012 foi um ano bissexto.

Fonte:

dateIdd1d2Observações
101/01/1010/10/10Mesmo ano, nenhum ano bissexto
201/01/1010/10/11Anos diferentes, nenhum ano bissexto
310/10/1101/01/10Datas reversas da linha anterior
428/02/1101/04/11Mesmo ano, nenhum ano bissexto;
528/02/1201/04/12Mesmo ano, ano bissexto; dura o dia útil
629/02/1201/04/12Mesmo ano, ano bissexto, d1 = dia útil
728/02/1129/02/12Anos diferentes, d2 = dia útil, convertido em 1º de março em ano d1

Transformação:

Neste caso, a transformação é simples:

derive type:single value:DATEDIF(d1,d2,dayofyear) as:'datedifs'

Resultados:

dateIdd1d2datedifsObservações
101/01/1010/10/10282Mesmo ano, nenhum ano bissexto
201/01/1010/10/11282Anos diferentes, nenhum ano bissexto
310/10/1101/01/10-282Datas reversas da linha anterior
428/02/1101/04/1132Mesmo ano, nenhum ano bissexto;
528/02/1201/04/1233Mesmo ano, ano bissexto; dura o dia útil
629/02/1201/04/1232Mesmo ano, ano bissexto, d1 = dia útil
728/02/1129/02/121Anos diferentes, d2 = dia útil, convertido em 1º de março em ano d1

Linhas 1 - 3:

  • A linha 1 fornece o cálculo da linha de base.
  • Na linha 2, os mesmos dias do ano são usados, mas o ano é diferente por uma contagem de 1. Porém, como estamos calculando dayofyear, o resultado é o mesmo da linha 1.

    OBSERVAÇÃO: durante o cálculo de dayofyear, o valor do ano de d2 é convertido no ano de d1. A diferença acaba sendo calculada.

  • A linha 3 representa a reversão de datas na linha 2.

    OBSERVAÇÃO: valores negativos de um cálculo dayofyear indicam que d2 ocorre antes no calendário do que d1, ignorando o ano.

Linhas 4 - 7: anos bissextos

  • A linha 4 fornece um cálculo da linha de base para um ano não bissexto.
  • A linha 5 usa os mesmos dias da linha 4, mas o ano (2012) é bissexto. As datas abrangem um dia útil (29 de fevereiro). O resultado DATEDIF é 1 a mais que o valor na linha anterior.

    OBSERVAÇÃO: quando as duas datas abrangem o dia 29 de fevereiro e o ano de d1 é bissexto, 29 de fevereiro é incluído como parte do resultado calculado.

  • A linha 6 move a data 1 um dia à frente. Dessa forma, ela agora está em uma data de dia útil. O resultado é um a menos que a linha anterior, que também abrangeu o dia útil.
  • A linha 7 alterna o dia útil para d2. Neste caso, d2 é convertido no ano de d1. No entanto, como era originalmente um dia útil, no ano de d1, esse valor é 1º de março. Assim, a diferença entre as duas datas é 1.

    OBSERVAÇÃO: se d2 for 29 de fevereiro e o ano de d1 não for bissexto, a data usada para d2 será 1º de março no ano de d1.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Google Cloud Dataprep
Precisa de ajuda? Acesse nossa página de suporte.