Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Появилась необходимость считать недели в календаре с первого февраля.
При том, логика обратна системной в том, что по умолчанию неделя начавшаяся в предыдущем году заканчивается в следующем (например, если 31/12 - Понедельник 52й недели, то 06/01 - Воскресенье так же 52й недели), а требуется первой неделей года сделать ту, в которой находится 01/02.
Данная задача была решена, но считаю, что решение крайне неэффективно, возможно, есть встроенная функция или более рациональный способ, ведь финансовые календари встречаются часто.
Вот найденное решение:
if(daynumberofyear(Temp.TempDate)<daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01')),
dual(
ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5) & ' week ' & (Year(Temp.TempDate)-1),
(Year(Temp.TempDate)-1)*100+ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5)
)
,
dual(
ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5) & ' week ' & Year(Temp.TempDate),
Year(Temp.TempDate)*100+ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5)
)
) as [Week and Year],
Ладно, чувствую, что активность в этой группе оставляет желать лучшего.
Так что, тема пусть весит, может кому пригодится это решение.
ап