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)