我正在尝试创建一个查询来自名为(callstable)的表中的日期列(dateofcall)的查询,并使用前2年的yyyy-mm格式创建另外两列。
除此之外,查询还需要查看dateofcall列中的日期,并仅显示上个月的结果。
如果我今天(2015年10月7日)运行查询,那么将其用英语表示,结果将如下所示
答案 0 :(得分:1)
由于您使用的是 SQL Server 2012 ,因此您可以利用FORMAT()
功能。
您可以同时使用FORMAT()
和DATEADD()
来获得结果:
Select DateOfCall,
Format(DateAdd(Year, -2, DateOfCall), 'yyyy-MM') [2 Years Ago],
Format(DateAdd(Year, -1, DateOfCall), 'yyyy-MM') [1 Year Ago]
From CallsTable
Where DatePart(Month, DateOfCall) = DatePart(Month, DateAdd(Month, -1, GetDate())
And DatePart(Year, DateOfCall) = DatePart(Year, DateAdd(Month, -1, GetDate())
答案 1 :(得分:1)
这是另一种可能适用于任何tsql版本的解决方案:
select cd,convert(char(7),cd1,126) oneyear,
convert(char(7),cd2,126) twoyears from
(select dateofcall cd, dateadd(year,-1,dateofcall) cd1,
dateadd(year,-2,dateofcall) cd2, dateadd(month,-1,getdate()) cu1 from callstable) cs
where month(cd)=month(cu1) and year(cd)=year(cu1)
点击此处查看working example。