2013-12-18 8 views
0

Можно ли сделать следующее в SQL. Я хотел бы написать код, который будет возвращать записи между определенными датами, но будет автоматически обновляться при запуске отчета. Так, например:Между датами Where Clause With Shifting Date

12/18 Я хотел бы вернуть записи с 11-1 по 11/18 и с 12/1 по 12/18, чтобы я мог сравнивать месяц за месяц с этими записями в своем отчете.

Я понимаю, что я могу сделать:

WHERE 
[database] BETWEEN '2013-11-01' and DATEADD(Month, 1, getdate())) 
and not [database] IN ('2013-11-19 and '2013-11-30') 

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

B.[datepaid] between DATEADD(Month, -1, getdate()) 
and DATEADD(MONTH, 1, getdate())) 

, но он возвращает все записи с ноября.

+0

Тот факт, что это возвращение результатов от всего ноября, потому что у вас есть '2013-11-01' жестко закодированы в вашем' where' статье , – aledpardo

ответ

0

Я бы порекомендовал against using BETWEEN with Dates, так как он может иметь неожиданные результаты. Но в вашем случае, вы можете использовать:

WHERE ([Date] >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()) - 1, '19000101') 
AND [Date] < DATEADD(MONTH, -1, GETDATE())) 
OR ([Date] >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101') 
AND [Date] < GETDATE()); 

Demo on SQL Fiddle