0

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

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

但是我想要一些安全的东西,所以如果是的话,1/1/2013我会得到@month = 12and @year = 2012

谢谢!

这就是我所拥有的。

declare @month              int
declare @year               int

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

5 回答 5

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)
于 2012-08-01T14:18:49.713 回答
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;
于 2012-08-01T14:18:18.950 回答
0

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

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

如果你愿意,你可以把它分成两个独立的变量,但为什么要麻烦呢?(我假设您正在做的其他事情也是使用datetimes,而不是ints)


选择上面的两个datetime字符串是因为它们之间具有所需的关系——第二个字符串比第一个字符串早 1 个月开始。

于 2012-08-01T14:18:42.507 回答
0

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

if @month = 0
begin
  set @month = 12
  set @year = @year - 1
end
于 2012-08-01T14:19:03.690 回答
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
于 2012-08-01T14:23:36.480 回答