none
Comando DATEDIFF RRS feed

  • Pergunta

  • Bom dia,

    Quero aplicar um critério na  coluna b.prazo, onde a diferença entre a data atual esteja entre >=10 dias até <=30 dias, não sei como aplicar, se é através de DATEDIFF ou BETWEEN

    DATEDIFF(DAY, b.prazo, GETDATE()) >=10 and <= 30)

    sexta-feira, 21 de junho de 2019 12:13

Respostas

  • Quero aplicar um critério na  coluna b.prazo, onde a diferença entre a data atual esteja entre >=10 dias até <=30 dias, não sei como aplicar, se é através de DATEDIFF ou BETWEEN

    DATEDIFF(DAY, b.prazo, GETDATE()) >=10 and <= 30)

    Edvaldo, se a coluna prazo indica data no passado, então me parece que a construção que você forneceu está correta, só que utilizando o BETWEEN ou repetindo o cálculo. Por exemplo:

    -- código #1
    SELECT ...
    from ...
    where DATEDIFF(DAY, b.prazo, cast( current_timestamp as date)) between 10 and 30 ...

     

    Entretanto, a construção acima é  non sargable, conforme detalhado no artigo “Construindo códigos T-SQL eficientes: Sargability”. Sugiro que a substitua por algo como

    -- código #2 SELECT ... from ... where b.prazo between dateadd(day, -30, cast( current_timestamp as date)) and dateadd(day, -10, cast( current_timestamp as date))

    ou

    -- código #3 declare @10dias date, @30dias date; set @10dias= dateadd (day, -10, cast( current_timestamp as date)); set @30dias= dateadd (day, -30, cast( current_timestamp as date)); SELECT ... from ... where b.prazo between @30dias and @10dias ...



    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz sexta-feira, 21 de junho de 2019 12:36
    • Marcado como Resposta Edvaldo A sexta-feira, 21 de junho de 2019 13:01
    sexta-feira, 21 de junho de 2019 12:35

Todas as Respostas

  • Quero aplicar um critério na  coluna b.prazo, onde a diferença entre a data atual esteja entre >=10 dias até <=30 dias, não sei como aplicar, se é através de DATEDIFF ou BETWEEN

    DATEDIFF(DAY, b.prazo, GETDATE()) >=10 and <= 30)

    Edvaldo, se a coluna prazo indica data no passado, então me parece que a construção que você forneceu está correta, só que utilizando o BETWEEN ou repetindo o cálculo. Por exemplo:

    -- código #1
    SELECT ...
    from ...
    where DATEDIFF(DAY, b.prazo, cast( current_timestamp as date)) between 10 and 30 ...

     

    Entretanto, a construção acima é  non sargable, conforme detalhado no artigo “Construindo códigos T-SQL eficientes: Sargability”. Sugiro que a substitua por algo como

    -- código #2 SELECT ... from ... where b.prazo between dateadd(day, -30, cast( current_timestamp as date)) and dateadd(day, -10, cast( current_timestamp as date))

    ou

    -- código #3 declare @10dias date, @30dias date; set @10dias= dateadd (day, -10, cast( current_timestamp as date)); set @30dias= dateadd (day, -30, cast( current_timestamp as date)); SELECT ... from ... where b.prazo between @30dias and @10dias ...



    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz sexta-feira, 21 de junho de 2019 12:36
    • Marcado como Resposta Edvaldo A sexta-feira, 21 de junho de 2019 13:01
    sexta-feira, 21 de junho de 2019 12:35
  • Olá Edvaldo, bom dia

    Vamos ver se eu entendi direito

    Primeiro eu criei uma tabela temporária, simulando no caso dessa sua tabela onde possui o campo b.prazo

    DECLARE @TEMP TABLE
    (
    prazo datetime, 
    valor varchar(9)
    )

    inseri o valor do prazo, nesse caso no datediff 

    INSERT INTO @TEMP (prazo, valor) values ('2019-06-5', 'blablabla')

    Baseado no que você informou, eu estou selecionando somente os dados que estão com o valor entre 10 e 30, usei tanto o datediff como o between

    select  *
    from @TEMP b
    where DATEDIFF(DAY, b.prazo, GETDATE()) BETWEEN 10 and 30

    Era este o caso informado?

    att


    Microsoft .net

    sexta-feira, 21 de junho de 2019 12:44
  • Obrigado José, deu certinho !!
    sexta-feira, 21 de junho de 2019 13:01