- 1
- 2
DATEADD(day,DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,DATEADD(d,
(day(EndDate)-1)*-1,EndDate))+1,0)))-1,DATEADD(d,(day(EndDate)-1)*-1,EndDate))
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−116
DATEADD(day,DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,DATEADD(d,
(day(EndDate)-1)*-1,EndDate))+1,0)))-1,DATEADD(d,(day(EndDate)-1)*-1,EndDate))
Вот так в M$ SQL вычисляют последний день месяца.
http://govnokod.ru/15606#comment223642
guest 01.04.2014 14:39 # −31
DateAdd(day,-Day(@D),DateAdd(month,1,@D))
bormand 01.04.2014 14:54 # −31
DBdev 01.04.2014 15:02 # −31
2014-01-28
guest 01.04.2014 15:11 # −27
select @D, DateAdd(day,-1,DateAdd(month,1,DateAdd(day,-Day(@D)+1,@D)))
DBdev 01.04.2014 15:29 # −31
Я два варианта видел - через 3 DATEADD и через DATEADD(DATEDIFF(DATEADD)).
И вообще, да, в SQL Server-e нет встроенной функции нахождения последнего дня в месяце, а ещё функции нахождения праздничного дня для разных стран согласно последнему законодательству и т.п.
Но! Надо просто понять, что в транзакционной БД оно найух и не надо, а в аналитической применяются другие методы для работы с датами (см. тред по ссылке в начальном посте).
guest 01.04.2014 15:55 # −31
Lokich 01.04.2014 21:55 # −30
DBdev 02.04.2014 11:54 # −31
guest 04.04.2014 21:33 # −20
lakrVOg 25.08.2021 05:29 # 0