【www.gdgbn.com--php与数据库】

declare @date  datetime
set @date=getdate()
--当前月第一天减去一天
select dateadd(day,-1,dateadd(month,datediff(month,0,@date),0)) as "上月最后一天"
--另一种当前月第一天算法
select dateadd(day,-1,dateadd(day,1-datepart(day,@date),@date)) "上月最后一天"
select dateadd(day,1-datepart(day,@date),@date)-1 "上月最后一天"
--另一种算法,不能用当前月的最后一天加一个月,因为当前月可能是30天。
--例如 select dateadd(month,1,"2010-06-30") --结果是2010-07-30而不是2010-07-31,
--这也是月末算法采用下月第一天减1天计算的原因
--但是如果计算月是31天择无此问题
--例如 select dateadd(month,1,"2010-05-31") --结果是2010-06-30
--因此下面算法是正确的,-1 表示"1899-12-31 00:00:00.000"-- select convert(datetime,-1)
select dateadd(month,datediff(month,-1,@date)-1,-1)
--另一种当前月算法
select dateadd(day,-1,dateadd(day,1-datepart(day,@date),@date)) "上月最后一天"
--简化
select dateadd(day,0-datepart(day,@date),@date) "上月最后一天"
go

本文来源:http://www.gdgbn.com/jiaocheng/26041/