sql >> Databasteknik >  >> RDS >> Sqlserver

Dela upp datumintervall till rader för år och månad på SQL Server 2005

Här är en metod som använder rekursiva CTE:

with CTE as (
      select id, dateStart as dte, dateEnd
      from t
      union all
      select id, dateadd(month, 1, dte), dateEnd
      from CTE
      where dateadd(month, 1, dte) < dateEnd
     )
select id, dte
from CTE;

Du kan konvertera det slutliga resultatet till vilket format du vill. Till exempel:

select id, year(dte) * 10000 + month(dte) as yyyymm_int

eller

select id, cast(year(dte) * 10000 + month(dte) as varchar(255)) as yyyymm


  1. Återställ rotlösenordet för MySQL på Windows

  2. sp_executesql är långsam med parametrar

  3. mysql-fråga med random och desc

  4. Beräkna decil från frekvens i MySQL