none
Range de data: 1º dia do mês e dia - 1 até o final do mês RRS feed

  • Pergunta

  • Tenho uma consulta onde quero identificar um range de data: do 1º dia do mês até o dia de ontem (d-1), até chegar no último dia do mês ou seja, se hoje é dia 10 a consulta retorna dados entre os dias 1 à 10 do mês, 1 à 11, 1 à 12.........1 à 31..

    a função funciona até que seja o primeiro dia do mês, onde a primeira função do 1º dia é estática, nunca muda, porém a segunda função d-1, no 1º dia do mês volta para o mês anterior (getdate()-1).

    OBS: Não gostaria de fazer um CASE validando se é dia 1º ou não.

    SELECT DATEADD(MM,-1,DATEADD(DD,-DAY(GETDATE())+1,(SUBSTRING(CONVERT(VARCHAR,(GETDATE()),120),1,10)) + ' 00:00:00')) , DATEADD(DD,-DAY(GETDATE()),(SUBSTRING(CONVERT(VARCHAR,(GETDATE()),120),1,10)) + ' 23:59:59')

    quarta-feira, 6 de dezembro de 2017 12:17

Respostas

  • Veja se isso te atende 
    --01/12/2017 00:00:00"  à  "05/12/2017 23:59:59"
    
    --Porém no dia 1º deste mês o resultado seria este:
    
    --"01/12/2017 00:00:00"  à  "30/11/2017 23:59:59"
    
    DECLARE @dataInicio DATETIME = DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1);
    
    DECLARE @Data DATETIME = '2017-12-06';
    
    WITH Dados
    AS (SELECT @dataInicio Dia
        UNION ALL
        SELECT DATEADD(DAY, 1, R.Dia)
        FROM Dados R
        WHERE R.Dia < DATEADD(DAY, -1, @Data)
       ),
         Intervalo
    AS (SELECT PrimeiroDia = FIRST_VALUE(R.Dia) OVER (ORDER BY (SELECT NULL)),
               R.Dia,
               UltimoDIa = LAST_VALUE(R.Dia) OVER (ORDER BY (SELECT NULL))
        FROM Dados R
       )
    SELECT 
           I.Dia,
    	   I.PrimeiroDia,
           I.UltimoDIa,
           Texto = CONCAT(
                                                           FORMAT(I.PrimeiroDia,'dd/MM/yyyy HH:mm:ss'),
                                                            SPACE(1),
                                                            'à',
                                                            SPACE(1),
                                                            FORMAT(I.UltimoDIa,'dd/MM/yyyy 23:59:59')
                                                        )
    FROM Intervalo I
    OPTION (MAXRECURSION 0);
    

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    quarta-feira, 6 de dezembro de 2017 13:05
  • Deleted
    quarta-feira, 6 de dezembro de 2017 23:12

Todas as Respostas

  • Qual seria o resultado para o dia de hoje ??

    não consegui entender a saida

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    quarta-feira, 6 de dezembro de 2017 12:28
  • "01/12/2017 00:00:00"  à  "05/12/2017 23:59:59"

    Porém no dia 1º deste mês o resultado seria este:

    "01/12/2017 00:00:00"  à  "30/11/2017 23:59:59"

    quarta-feira, 6 de dezembro de 2017 12:40
  • Bom dia,

    gustavoalp, qual deveria ser o resultado se hoje fosse dia 01/12/2017?


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 6 de dezembro de 2017 12:59
  • Veja se isso te atende 
    --01/12/2017 00:00:00"  à  "05/12/2017 23:59:59"
    
    --Porém no dia 1º deste mês o resultado seria este:
    
    --"01/12/2017 00:00:00"  à  "30/11/2017 23:59:59"
    
    DECLARE @dataInicio DATETIME = DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1);
    
    DECLARE @Data DATETIME = '2017-12-06';
    
    WITH Dados
    AS (SELECT @dataInicio Dia
        UNION ALL
        SELECT DATEADD(DAY, 1, R.Dia)
        FROM Dados R
        WHERE R.Dia < DATEADD(DAY, -1, @Data)
       ),
         Intervalo
    AS (SELECT PrimeiroDia = FIRST_VALUE(R.Dia) OVER (ORDER BY (SELECT NULL)),
               R.Dia,
               UltimoDIa = LAST_VALUE(R.Dia) OVER (ORDER BY (SELECT NULL))
        FROM Dados R
       )
    SELECT 
           I.Dia,
    	   I.PrimeiroDia,
           I.UltimoDIa,
           Texto = CONCAT(
                                                           FORMAT(I.PrimeiroDia,'dd/MM/yyyy HH:mm:ss'),
                                                            SPACE(1),
                                                            'à',
                                                            SPACE(1),
                                                            FORMAT(I.UltimoDIa,'dd/MM/yyyy 23:59:59')
                                                        )
    FROM Intervalo I
    OPTION (MAXRECURSION 0);
    

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    quarta-feira, 6 de dezembro de 2017 13:05
  • DECLARE @DataHoje DATETIME
    SET @DataHoje = '03/10/2017'

    SELECT
        DtLancto
    FROM
        TbMovToCon
    WHERE
        (Day(DtLancto) >= 1) and (Day(DtLancto) <= day(@DataHoje)) and
        (month(DtLancto) = month(@DataHoje)) and
        (Year(DtLancto) = Year(@DataHoje))
     ORDER BY DtLancto
    quarta-feira, 6 de dezembro de 2017 18:45
  • Deleted
    quarta-feira, 6 de dezembro de 2017 23:12