如何根据SQL Server中的月份和年份查找上个月的最后一天

时间:2017-11-16 05:10:26

标签: .net sql-server sql-server-2012

我有一个要求,我必须找到上个月的期末余额 以月和年为基础。

我试过这段代码:

DECLARE @month NUMERIC = 11
DECLARE @Year NUMERIC = 2017

SELECT  
    DATEADD(DAY, -1, DATEADD(MONTH, @Month, DATEADD(YEAR, @Year - 1900, 0))) 

但这会返回当月最后一天的值'2017-11-30 00:00:00.000'

而不是这个我想要上个月的最后一天:'2017-10-31 00:00:00.000'

2 个答案:

答案 0 :(得分:1)

对于上个月的日期,您只需将-1添加到变量@Month

SELECT  Dateadd(day, -1, Dateadd(month, @Month-1, 
                                      Dateadd(year, @Year - 1900, 0) 
                                             )) 

结果:

2017-10-31 00:00:00.000

答案 1 :(得分:0)

或者你只需​​使用2个DATEADD()

就可以简化一下
SELECT  DATEADD(month, @Month - 1, DATEADD(year, @Year - 1900, -1))

或将@Year转换为月份,仅使用单个DATEADD()

SELECT  DATEADD(month, (@Year - 1900) * 12 + @Month - 1, - 1)