2013-03-18 2 views
2

Я использую SQL Server 2008, и я пытаюсь вычислить две даты из года назад. Скажем, если сегодня это 3/18/13, мне нужно найти 4/1/12, а также найти 4/30/12.Найти дату с прошлого года в SQL Server

Я пробовал следующее, которое дает мне 4/18/12, но не уверен, как получить желаемые даты, упомянутые выше. Кроме того, мне нужно найти 5/1/12, 5/31/12 ... и т. Д. Любая идея? Благодарю.

Я также попытался

DATEADD(YEAR,-1, DATEADD(MONTH,DATEDIFF(MONTH,-11, GETDATE()), 0)) It returns 4/1/12 , 
DATEADD(YEAR,-1, DATEADD(MONTH,DATEDIFF(MONTH,-10, GETDATE()), 0)) also returns 4/1/12 instead of 5/1/12 
+0

Зачем вам нужно * рассчитать * их? Это просто тренировка? Если это так, вы можете использовать комбинацию 'DATEDIFF' и' DATEADD', получив количество дней с 1 января, а затем добавив этот номер, чтобы получить нужную дату. Эта логика не зависит от текущей даты - если это нормально. –

+0

Вы подтверждаете, что хотите начать и завершить следующий месяц с сегодняшнего дня, но год назад? Хорошее описание общих требований поможет. –

+0

Да, начало и конец следующего месяца с сегодняшнего дня, но с года назад. Это не для тренировок, а для отчета, который я создаю. – Joe

ответ

3

Если то, что вы хотите, это первый и последний день следующего месяца от одного года назад, что-то подобное может работать:

SELECT DATEADD(month,-11,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)) 
SELECT DATEADD(month,-11,DATEADD(ms,-3,DATEADD(mm,0,DATEADD(mm,DATEDIFF(mm,0,GETDATE())+1,0)))) 

Я не удивлюсь, если есть более эффективный способ сделать это. В статье на examples of how to Calculate Different SQL Server Dates обсуждаются такие виды расчетов.

+0

Спасибо, я попробую – Joe