SQL сервер - выберите все элементы с датой за предыдущий месяц - PullRequest
4 голосов
/ 03 февраля 2010

В моей базе данных SQL Server есть таблица « items », в которой есть столбец « dateFinished ».

У меня есть сценарий, который будет запускаться 1-го числа каждого месяца, в котором нужно выбрать все элементы, которые были закончены в предыдущем месяце.

Так, например, 1 февраля ему нужно будет выбрать все элементы, для которых dateFinished больше или равен 00:00 1 января и меньше 00:00 1 февраля.

он также должен работать в течение нового года (например, DEC - JAN).

Есть идеи?

Ответы [ 4 ]

8 голосов
/ 03 февраля 2010
Select * 
  from items 
 where datefinished >= dateadd(m, datediff(m, 0, GETDATE()) - 1, 0) 
   AND datefinished < dateadd(m, datediff(m, 0, GETDATE()), 0)
7 голосов
/ 03 февраля 2010

Вы можете получить день предыдущего месяца с dateadd(m,-1,getdate()).Затем отфильтруйте год и месяц этой даты в предложении where, например:

select *
from items
where datepart(yy,dateFinished) = datepart(yy,dateadd(m,-1,getdate()))
and datepart(m,dateFinished) = datepart(m,dateadd(m,-1,getdate()))

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

1 голос
/ 15 января 2015

Просто используйте то, что я только что использовал: DATEDIFF(mm,dateFinished,GETDATE()) = 1

SELECT * 
FROM items 
WHERE DATEDIFF(mm,dateFinished,GETDATE()) = 1
0 голосов
/ 03 февраля 2010

Я бы начал с проверки функции DATEADD http://msdn.microsoft.com/en-us/library/ms186819.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...