Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Diviser la plage de dates en lignes année-mois sur SQL Server 2005

Voici une méthode qui utilise des CTE récursifs :

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;

Vous pouvez convertir le résultat final dans n'importe quel format que vous aimez. Par exemple :

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

ou

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