Как сделать условные операторы SQL Server? - PullRequest
0 голосов
/ 10 февраля 2009

У меня есть база данных с информацией о событии, включая дату (в формате MMDDYYYY). Можно ли написать оператор SQL Server, чтобы получить только строки, которые попадают в определенный период времени?

что-то вроде этого псевдо-утверждения:

SELECT * FROM events WHERE [current_date minus date <= 31] ORDER BY date ASC

, где date - это дата в строке SQL Server, а current_date - сегодняшняя дата. 31 - это дни, поэтому в основном это месяц.

Я могу легко обработать данные после общего утверждения (читай: SELECT * FROM events ORDER BY date ASC), но было бы «круто» (как я узнал что-то новое: P) знать, возможно ли это.

Ответы [ 8 ]

4 голосов
/ 10 февраля 2009

SELECT * FROM событий WHERE date> getdate () - 31 ORDER BY date ASC

2 голосов
/ 10 февраля 2009
DECLARE @start_date datetime
SET @start_date = DATEADD(day, -31, getdate())
SELECT * FROM events WHERE date BETWEEN @start_date AND getdate()
2 голосов
/ 10 февраля 2009

Использовать DateDiff:

SELECT * FROM событий WHERE DATEDIFF (день, дата, getdate ()) <31 ORDER BY date ASC </p>

http://msdn.microsoft.com/en-us/library/ms189794.aspx

1 голос
/ 10 февраля 2009

Для лучшей производительности не используйте функцию в выражении. Сначала рассчитайте пороговую дату (в вашем клиенте или хранимой процедуре), а затем используйте

ВЫБРАТЬ ... ГДЕ [дата]> {поставить порог здесь}

0 голосов
/ 10 февраля 2009

Используйте GetDate () для возврата текущей даты.

Сложить или вычесть в днях.

Примером может быть:

SELECT *
FROM MY_TABLE T
WHERE T.SOME_DATE BETWEEN (GetDate()-31) AND GetDate()
0 голосов
/ 10 февраля 2009

Также:

SELECT * 
FROM events 
WHERE current_date BETWEEN dateadd(day,-31,getdate()) AND getdate() 
ORDER BY date ASC

Хотя действительно МЕЖДУ это мерзость

0 голосов
/ 10 февраля 2009

Возможно, вы могли бы использовать функцию DATEDIFF.

Д'оо, ниндзя посмотрел, чтобы убедиться, что я не говорю чепуху! :)

0 голосов
/ 10 февраля 2009

DateDiff и GetDate () должны отсортировать вас.

Пример:

SELECT * FROM events WHERE DATEDIFF(day, date, GETDATE()) <= 31 ORDER BY date ASC
...