bonjour
Une table de calendrier peut être extrêmement utile surtout en développement et pour faire du jointure avec d’autre table
ci joint une petit requête qui vous permettra de crée un table calendrier sur x temps
Quelque remarque
*set datefirst 1 :le premier jour de la semaine est un lundi et non plus un dimanche msdn
*on définit une date de début et une date de fin
*where dateadd(day,n,@stardate)<=@endate: ce ci nous permettre d'incrémenter de 1 jour en 1 jour la variable n pour pouvoir à terme arrêter la boucle
*le colonne type_jour indiquant si le jour est travaillé ou non
set datefirst 1 declare @stardate date ='2000-01-01'
declare @endate date ='2100-01-01';
with cte as (select 1 as n ,@stardate as date_jour,
convert(varchar(10),@stardate,131)as date_format_hijri,
datepart(day,@stardate)as num_jour,
datepart(weekday,@stardate)as num_jour_semaine,
datepart(dayofyear,@stardate)as num_jour_année,
datepart(week,@stardate)as num_semaine,
datepart(QUARTER,@stardate)as trimesstre,
datename(weekday,@stardate)as nom_jour,
datename(month,@stardate)as nom_mois,
year(@stardate)as année, case when datepart(weekday,@stardate)in(6,7)then 'weekend' else 'no_weekend' end as type_jour
union all
select n+1,
dateadd(day,n,@stardate),
convert(varchar(10),dateadd(day,n,@stardate),131),
datepart(day,dateadd(day,n,@stardate)),
datepart(weekday,dateadd(day,n,@stardate)),
datepart(dayofyear,dateadd(day,n,@stardate)),
datepart(week,dateadd(day,n,@stardate)),
datepart(QUARTER,dateadd(day,n,@stardate)),
datename(weekday,dateadd(day,n,@stardate)),
datename(month,dateadd(day,n,@stardate))
,year(dateadd(day,n,@stardate)), case when datepart(weekday,dateadd(day,n,@stardate))in(6,7)then 'weekend' else 'no_weekend' end
from cte where dateadd(day,n,@stardate)<=@endate )
select * from cte OPTION (MAXRECURSION 0)
ce ci est les jours de 2000 à 2100 inclus
bonne chance A+