特别是MSSQL 2005.
这是一个解决方案,可以为您提供当月的最后一秒.您可以提取日期部分或修改它以仅返回日期.我在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
下一部分将月数加上0添加到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和DATEADD函数减去应用于当前日期的DAY函数返回的值.
dateadd(day, -day(getdate()), dateadd(month, 1, getdate()))