Вот решение, которое дает вам последнюю секунду текущего месяца. Вы можете извлечь часть даты или изменить ее, чтобы вернуть только день. Я проверял это на SQL Server 2005.
select dateadd( s, -1, dateadd( mm, datediff( m, 0, getdate() ) + 1, 0 ) );
Чтобы понять, как это работает, мы должны взглянуть на функции dateadd () и datediff () .
DATEADD(datepart, number, date)
DATEDIFF(datepart, startdate, enddate)
Если вы выполните только самый внутренний вызов функции datediff (), вы получите номер текущего месяца с отметкой времени 0.
select datediff(m, 0, getdate() );
1327
Следующая часть добавляет это число месяцев плюс 1 к отметке времени 0, давая вам начальную точку следующего календарного месяца.
select dateadd( mm, datediff( m, 0, getdate() ) + 1, 0 );
2010-09-01 00:00:00.000
Наконец, внешний метод dateadd () просто вычитает одну секунду из начальной отметки времени следующего месяца, давая вам последнюю секунду текущего месяца.
select dateadd( s, -1, dateadd( mm, datediff( m, 0, getdate() ) + 1, 0 ) );
2010-08-31 23:59:59.000
<ч />
Этот старый ответ (ниже) содержит ошибку, из-за которой он не работает в последний день месяца, в котором больше дней, чем в следующем месяце. Я оставляю это здесь как предупреждение для других.
Добавьте один месяц к текущей дате, а затем вычтите значение, возвращенное функцией DAY, примененной к текущей дате, используя функции DAY и DATEADD.
dateadd(day, -day(getdate()), dateadd(month, 1, getdate()))