В SQL Server я обычно получаю последний день месяца относительно произвольного момента времени:
select dateadd(day,-day(dateadd(month,1,current_timestamp)) , dateadd(month,1,current_timestamp) )
В двух словах:
- Из вашей контрольной точки времени
- Добавьте 1 месяц,
- Затем из полученного значения вычтите день месяца в днях.
Вуаля!У вас последний день месяца, в котором указана ваша контрольная точка во времени.
Получение первого дня месяца проще:
select dateadd(day,-(day(current_timestamp)-1),current_timestamp)
- Из вашей контрольной точки-по времени,
- вычитать (в днях), на 1 меньше, чем текущий компонент дня месяца.
Удаление / нормализация постороннего компонента времени оставляется какупражнение для читателя.