我试图基本上动态地将两个变量(@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
答案 0 :(得分:2)
您可以使用DATEADD从当前日期减去一个月,然后抓取MONTH
和YEAR
部分:
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