SQL Server 2005获取任何年份中任何月份的第一个和最后一个日期

Ris*_*god 11 sql t-sql sql-server datetime sql-server-2005

我有一个存储过程,必须接受一个月作为int(1-12)和一年作为int.鉴于这两个值,我必须确定该月的日期范围.所以我需要一个datetime变量来表示该月的第一天,另一个datetime变量来表示该月的最后一天.有没有一种相当简单的方法来获取此信息?

DOK*_*DOK 20

每月的第一天: SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)

本月最后一天: SELECT DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0))

替换GETDATE()的DateTime变量值.

我很久以前从这个非常方便的页面得到了这个页面,其中包含一大堆其他日期计算,例如"当周的星期一"和"本月的第一个星期一".


Mar*_*ith 15

DECLARE @Month int
DECLARE @Year int

set @Month = 2
set @Year = 2004

select DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0)) /*First*/

select DATEADD(day,-1,DATEADD(month,@Month,DATEADD(year,@Year-1900,0))) /*Last*/
Run Code Online (Sandbox Code Playgroud)

但是你需要什么作为本月最后一天的时间组件?如果你的日期时间有午夜以外的时间成分你可能会做更好的事情

WHERE COL >= DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0)) 
     AND COL < DATEADD(month,@Month,DATEADD(year,@Year-1900,0)) 
Run Code Online (Sandbox Code Playgroud)

这样,如果最终迁移到SQL Server 2008和更高精度的datetime数据类型,则代码将继续工作.