SQL查询:根据日期列

时间:2015-10-07 13:24:17

标签: sql sql-server sql-server-2012

我正在尝试创建一个查询来自名为(callstable)的表中的日期列(dateofcall)的查询,并使用前2年的yyyy-mm格式创建另外两列。
除此之外,查询还需要查看dateofcall列中的日期,并仅显示上个月的结果。
如果我今天(2015年10月7日)运行查询,那么将其用英语表示,结果将如下所示

enter image description here

2 个答案:

答案 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