none
Listar todas as datas do mês RRS feed

  • Pergunta

  • Boa tarde Galera,

    alguém sabe se é possível via sql server, colocar um intervalo de datas tipo '2017-03-01' e '2017-03-31'?

    E o banco trazer as datas da seguinte maneira:

    2017-03-01

    2017-03-02

    2017-03-03

    2017-03-04

    Assim por diante até o último dia do mês.

    Grato!

    quarta-feira, 29 de março de 2017 18:53

Respostas

  • Deleted
    • Sugerido como Resposta Antero Marques quarta-feira, 29 de março de 2017 19:11
    quarta-feira, 29 de março de 2017 19:08
  • Seque um exemplo usando CTE

    DECLARE @DataInicio DATETIME = DATEFROMPARTS(2017, 1, 1);
    DECLARE @DataTermino DATETIME = DATEFROMPARTS(2017, 1, 31);
    
    
    WITH    Datas
              AS ( SELECT @DataInicio AS Data
                   UNION ALL
                   SELECT DATEADD(DAY, 1,R.Data) FROM Datas R
    			   WHERE  R.Data < @DataTermino
                 )
        SELECT  [Dia do Mes]= R.Data,
    			[Dia do Mes outro Formato] = CAST(r.Data AS DATE)
            FROM Datas R;


    Wesley Neves

    segunda-feira, 3 de abril de 2017 11:41

Todas as Respostas

  • Deleted
    quarta-feira, 29 de março de 2017 19:01
  • Boa tarde, acho que me expressei errado, eu precisava de saber se tem como criar alguma função, ou procedure sei lá....Que o usuário digita um intervalo de datas e o sql lista todos os dias desse intervalo.

    Mas eu não tenho tabela, campo nada disso!

    Grato!

    quarta-feira, 29 de março de 2017 19:06
  • Deleted
    • Sugerido como Resposta Antero Marques quarta-feira, 29 de março de 2017 19:11
    quarta-feira, 29 de março de 2017 19:08
  • fsm1993,

    Veja se este outro exemplo ajuda:

    CREATE FUNCTION RANGE_DATAS(@DATA_INICIAL DATETIME,@DATA_FINAL DATETIME)
    RETURNS VARCHAR(MAX)
    AS 
    BEGIN
    
    DECLARE @DATA_TEMP AS DATETIME
    DECLARE @COUNT AS INT
    DECLARE @LIMITE AS INT
    DECLARE @RETORNO AS VARCHAR(MAX)
    DECLARE @MES AS VARCHAR(2)
    DECLARE @ANO AS CHAR(4)
    
    ------------------------------------------------
    -- PARA TESTE
    ------------------------------------------------
    -- DECLARE @DATA_INICIAL AS DATETIME
    -- DECLARE @DATA_FINAL AS DATETIME
    -- SET @DATA_INICIAL = '2016-01-01'
    -- SET @DATA_FINAL = '2017-01-01'
    ------------------------------------------------
    
    
    SET @LIMITE = DATEDIFF(MM,@DATA_INICIAL,@DATA_FINAL) + 1
    SET @COUNT = 1
    SET @RETORNO = ''
    
    WHILE (@COUNT <= @LIMITE)
    BEGIN	
    	SET @DATA_TEMP = DATEADD(MONTH, @COUNT-1, @DATA_INICIAL)
    	SET @ANO = DATEPART(YEAR, @DATA_TEMP)	
    	SET @MES = DATEPART(MONTH, @DATA_TEMP)
    	SET @RETORNO = @RETORNO + '[' + @MES + '/' + @ANO +']'
    	IF (@COUNT <> @LIMITE )	SET @RETORNO = @RETORNO + ','
    	SET @COUNT = @COUNT + 1
    END
    
    RETURN @RETORNO
    
    END
    
    
    Select dbo.range_datas ('2016-01-01', '2017-12-01')


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    domingo, 2 de abril de 2017 01:22
  • Seque um exemplo usando CTE

    DECLARE @DataInicio DATETIME = DATEFROMPARTS(2017, 1, 1);
    DECLARE @DataTermino DATETIME = DATEFROMPARTS(2017, 1, 31);
    
    
    WITH    Datas
              AS ( SELECT @DataInicio AS Data
                   UNION ALL
                   SELECT DATEADD(DAY, 1,R.Data) FROM Datas R
    			   WHERE  R.Data < @DataTermino
                 )
        SELECT  [Dia do Mes]= R.Data,
    			[Dia do Mes outro Formato] = CAST(r.Data AS DATE)
            FROM Datas R;


    Wesley Neves

    segunda-feira, 3 de abril de 2017 11:41