2015-10-07 4 views
-4

Я пытаюсь создать запрос, который смотрит на столбец даты (dateofcall) из таблицы с именем (callstable) и создает еще 2 столбца с форматом yyyy-mm 2 предыдущих года.
В дополнение к этому запросу необходимо посмотреть дату в столбце dateofcall и показать только результаты за предыдущий месяц.
Чтобы положить, что в английском, если я запускал запрос сегодня (7/10/2015) результат будет выглядеть следующим образомSQL Query: отображение предыдущей даты на основе столбца даты

enter image description here

ответ

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()) 
+0

За исключением того, что вы действительно не должны использовать формат, когда можете просто использовать конвертацию, см. Http://sqlperformance.com/2015/06/t-sql-queries/format-is-nice-and-all-but –

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.

Смежные вопросы