代码之家  ›  专栏  ›  技术社区  ›  Ristogod

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

  •  11
  • Ristogod  · 技术社区  · 15 年前

    我有一个存储过程,它必须接受一个月作为int(1-12),一个年作为int。给定这两个值,我必须确定该月的日期范围。所以我需要一个datetime变量来表示那个月的第一天,另一个datetime变量来表示那个月的最后一天。有没有一个相当容易的方法来获得这个信息?

    8 回复  |  直到 7 年前
        1
  •  15
  •   Martin Smith    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*/
    

    但是,作为一个月的最后一天的时间组成部分,您需要什么呢?如果约会时间有午夜以外的时间组成部分,你最好做点类似的事情

    WHERE COL >= DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0)) 
         AND COL < DATEADD(month,@Month,DATEADD(year,@Year-1900,0)) 
    

    这样,如果最终迁移到SQL Server 2008和精度更高的日期时间数据类型,代码将继续工作。

        2
  •  20
  •   DOK    15 年前

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

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

    将datetime变量值替换为getDate()。

    我很久以前从 this very handy page 它有一大堆其他的日期计算,比如“本周的星期一”和“本月的第一个星期一”。

        3
  •  2
  •   AdaTheDev    15 年前
    DECLARE @Month INTEGER
    DECLARE @Year INTEGER
    SET @Month = 10
    SET @Year = 2010
    
    DECLARE @FirstDayOfMonth DATETIME
    DECLARE @LastDayOfMonth DATETIME
    
    SET @FirstDayOfMonth = Str(@Year) + RIGHT('0' + Str(@Month), 2) + '01'
    SET @LastDayOfMonth = DATEADD(dd, -1, DATEADD(mm, 1, @FirstDayOfMOnth))
    SELECT @FirstDayOfMonth, @LastDayOfMonth
    
        4
  •  2
  •   Tim Schmelter    15 年前

    试试这个:

    Declare @month int, @year int;
    Declare @first DateTime, @last DateTime;
    Set @month=10;
    Set @year=2010;
    Set @first=CAST(CAST(@year AS varchar) + '-' + CAST(@month AS varchar) + '-' + '1' AS DATETIME);
    Set @last=DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@first)+1,0));
    
    SELECT @first,@last;
    
        5
  •  2
  •   John Hartsock    15 年前
    DECLARE @Month int;
    DECLARE @Year int;
    DECLARE @FirstDayOfMonth DateTime;
    DECLARE @LastDayOfMonth DateTime;
    
    SET @Month = 3
    SET @Year = 2010
    
    SET @FirstDayOfMonth = CONVERT(datetime, CAST(@Month as varchar) + '/01/' + CAST(@Year as varchar));
    SET @LastDayOfMonth = DATEADD(month, 1, CONVERT(datetime, CAST(@Month as varchar)+ '/01/' + CAST(@Year as varchar))) - 1;
    
        6
  •  2
  •   Manish    14 年前
    select [FirstDay Of The Month] as Text ,convert(varchar,dateadd(d,-(day(getdate()-1)),getdate()),106) 'Date'
    union all
    select [LastDay Of The Month], convert(varchar,dateadd(d,-day(getdate()),dateadd(m,1,getdate())),106)
    
        7
  •  2
  •   techraf    10 年前
    DECLARE @Month  int = 3, @Year  int = 2016
    DECLARE @StartDate DATETIME
    DECLARE @EndDate DATETIME
    
    -- First date of month
    SET @StartDate = DATEADD(MONTH, @Month-1, DATEADD(YEAR, @Year-1900, 0));
    -- Last date of month
    SET @EndDate = DATEADD(SS, -1, DATEADD(MONTH, @Month, DATEADD(YEAR, @Year-1900, 0)))
    

    这将返回带有时间组件的第一个日期和最后一个日期。

        8
  •  1
  •   jam    12 年前

    本月最后日期:

    select dateadd(dd,-day(dateadd(mm,1,getdate())),dateadd(mm,1,getdate()))
    

    本月1日:

    select dateadd(dd,-day(getdate())+1,getdate())