Bil*_*ard 18

这是一个解决方案,可以为您提供当月的最后一秒.您可以提取日期部分或修改它以仅返回日期.我在SQL Server 2005上测试了这个.

select dateadd( s, -1, dateadd( mm, datediff( m, 0, getdate() ) + 1, 0 ) );
Run Code Online (Sandbox Code Playgroud)

要了解它是如何工作的,我们必须查看dateadd()datediff()函数.

DATEADD(datepart, number, date)  
DATEDIFF(datepart, startdate, enddate)
Run Code Online (Sandbox Code Playgroud)

如果您只运行对datediff()的最内部调用,则从时间戳0开始获取当前月份数.

select datediff(m, 0, getdate() );  
1327
Run Code Online (Sandbox Code Playgroud)

下一部分将月数加上0添加到0时间戳,为您提供下一个日历月的起点.

select dateadd( mm, datediff( m, 0, getdate() ) + 1, 0 );
2010-09-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

最后,外部dateadd()只是从下个月的开始时间戳中减去一秒,给出当前月份的最后一秒.

select dateadd( s, -1, dateadd( mm, datediff( m, 0, getdate() ) + 1, 0 ) );
2010-08-31 23:59:59.000
Run Code Online (Sandbox Code Playgroud)


这个旧的答案(下面)有一个错误,它在一个月的最后一天没有工作,这个月的天数多于下个月.我把它留在这里作为对别人的警告.

将一个月添加到当前日期,然后使用DAY和DATEADD函数减去应用于当前日期的DAY函数返回的值.

dateadd(day, -day(getdate()), dateadd(month, 1, getdate()))
Run Code Online (Sandbox Code Playgroud)