SQL Server:为上个月设置两个变量月份和年份,年份滚动安全

时间:2012-08-01 14:15:33

标签: sql sql-server

我试图基本上动态地将两个变量(@month和@year)设置为上个月和每年的任何变量。

所以在今天的情况@month = 7@year = 2012

但是我想要一年中安全的东西滚动,所以如果它是1/1/2013我会得到@month = 12@year = 2012

谢谢!

这就是我所拥有的。

declare @month              int
declare @year               int

set @month = month (getDate ())-1
set @year = 2012

5 个答案:

答案 0 :(得分:2)

您可以使用DATEADD从当前日期减去一个月,然后抓取MONTHYEAR部分:

DECLARE @monthAgo dateTime
DECLARE @month int
DECLARE @year int

SET @monthAgo = DATEADD(month, -1, GETDATE())
SET @month = MONTH(@monthAgo)
SET @year = YEAR(@monthAgo)

答案 1 :(得分:1)

步骤显示。您可以修改分配给@Now的值以进行测试。

DECLARE @Now DateTime = GETDATE();
DECLARE @Then DateTime = DATEADD(Month, -1, @Now);

DECLARE @Month Int = DATEPART(Month, @Then);
DECLARE @Year Int = DATEPART(Year, @Then);

SELECT @Month, @Year;

答案 2 :(得分:0)

作为单个查询,这给出了上个月的第一天:

select DATEADD(month,DATEDIFF(month,'20010101',CURRENT_TIMESTAMP),'20001201')

如果你愿意,你可以将它分成两个独立的变量,但为什么要这么做呢? (我假设您正在做的其余部分也在使用datetime,而不是int s)


选择上面的两个datetime字符串,因为它们之间具有所需的关系 - 第二个字符串在第一个字符串开始前1个月开始。

答案 3 :(得分:0)

你能不能只在你已经拥有的东西后添加:

if @month = 0
begin
  set @month = 12
  set @year = @year - 1
end

答案 4 :(得分:0)

试试这个

declare @month int
declare @year int
Declare @dt datetime=getdate()
set @month = DATEPART(mm,DATEADD(mm,-1,@dt))
select @month
set @year = DATEPART(yy,DATEADD(mm,-1,@dt))
select @year