generate days from date range

后端 未结 29 2530
渐次进展
渐次进展 2020-11-21 05:19

I would like to run a query like

select ... as days where `date` is between \'2010-01-20\' and \'2010-01-24\'

And return data like:

29条回答
  •  故里飘歌
    2020-11-21 06:04

    set language  'SPANISH'
    DECLARE @table table(fechaDesde datetime , fechaHasta datetime ) 
    INSERT @table VALUES('20151231' , '20161231');
    WITH x AS 
        (
            SELECT   DATEADD( m , 1 ,fechaDesde ) as fecha  FROM @table
            UNION ALL
            SELECT  DATEADD( m , 1 ,fecha )
            FROM @table t INNER JOIN x ON  DATEADD( m , 1 ,x.fecha ) <= t.fechaHasta
        )
    SELECT LEFT( CONVERT( VARCHAR, fecha , 112 ) , 6 ) as Periodo_Id 
    ,DATEPART ( dd, DATEADD(dd,-(DAY(fecha)-1),fecha)) Num_Dia_Inicio
    ,DATEADD(dd,-(DAY(fecha)-1),fecha) Fecha_Inicio
    ,DATEPART ( mm , fecha ) Mes_Id
    ,DATEPART ( yy , fecha ) Anio
    ,DATEPART ( dd, DATEADD(dd,-(DAY(DATEADD(mm,1,fecha))),DATEADD(mm,1,fecha))) Num_Dia_Fin
    ,DATEADD(dd,-(DAY(DATEADD(mm,1,fecha))),DATEADD(mm,1,fecha)) ultimoDia
    ,datename(MONTH, fecha) mes
    ,'Q' + convert(varchar(10),  DATEPART(QUARTER, fecha)) Trimestre_Name
    FROM x 
    OPTION(MAXRECURSION 0)
    

提交回复
热议问题