Как получить данные за последний месяц и данные за месяц - PullRequest
10 голосов
/ 24 марта 2011

Требуется помощь в написании запроса для получения данных за последний месяц, а также данных за месяц.

Если сегодняшняя дата - 23 марта 2011 г., мне нужно получить данные за прошлый месяц и данные досегодняшняя дата (означает 23 марта 2011 года).

Если дата 3 апреля 2011 года, данные должны состоять из данных за март и данных до 3 апреля 2011 года.

Спасибо,

Шахсра

Ответы [ 4 ]

14 голосов
/ 24 марта 2011
Today including time info  : getdate()
Today without time info    : DATEADD(DAY, DATEDIFF(day, 0, getdate()), 0)
Tomorrow without time info : DATEADD(DAY, DATEDIFF(day, 0, getdate()), 1)
Beginning of current month : DATEADD(month, datediff(month, 0, getdate()), 0)
Beginning of last month    : DATEADD(month, datediff(month, 0, getdate())-1, 0)

так что скорее всего

WHERE dateColumn >= DATEADD(month, datediff(month, 0, getdate())-1, 0)
  AND dateColumn <  DATEADD(DAY, DATEDIFF(day, 0, getdate()), 1)
3 голосов
/ 24 марта 2011

Шаг назад на один месяц, вычтите количество дней до текущей даты и добавьте один день.

WHERE  
  DateField <= GetDate() AND
  DateField >= DateAdd(
      mm, 
      -1, 
      DateAdd(dd, -1*DatePart(dd, GetDate())+1, GetDate())
  )

Чтобы быстро удалить время, вы можете использовать это приведение (Floor (Cast (GETDATE () AS FLOAT)) AS DATETIME)

Так что вторая часть будет (без времени)

DateField >= Cast( Floor( Cast( (DateAdd(
          mm, 
          -1, 
          DateAdd(dd, -1*DatePart(dd, GetDate())+1, GetDate())
      )) AS FLOAT ) ) AS DATETIME )
0 голосов
/ 24 марта 2011
Select Column1, Column2 From Table1
Where DateColumn <= GetDate() AND 
DateColumn >= DATEADD(dd, - (DAY(DATEADD(mm, 1, GetDate())) - 1), DATEADD(mm, - 1, GetDate()))

Редактировать: +1 к Расселу Стину. Я публиковал свой прежде, чем я знал, что он отправил.

0 голосов
/ 24 марта 2011

Очень полезная страница

declare @d datetime = '2011-04-03';

declare @startDate datetime;
select @startDate =
   CAST('01 '+ RIGHT(CONVERT(CHAR(11),DATEADD(MONTH,-1,@d),113),8) AS datetime);
select @startDate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...