Получить записи SQL на основе даты прошлого? - PullRequest
1 голос
/ 02 марта 2012

У меня есть несколько записей в базе данных, и в одном из столбцов указана дата добавления записи (называемая COMP_DATE).

Мне нужно сделать запрос, который будет выполняться каждый день, который выбирает записи, чьи COMP_DATE ровно n лет, 11 месяцев и 15 дней назад (в течение 24 часов).(То есть за 15 дней до n лет назад).

Как лучше всего это сделать?Должен ли я просто вычесть (n * 356 - 15 дней)?Как мне это сделать?

Спасибо.

Ответы [ 4 ]

1 голос
/ 02 марта 2012

лучший способ будет сделать это наоборот, чтобы получить n лет 11 месяцев и 15 дней назад Удалите n + 1 год и добавьте 15 дней, у вас будет меньше места для ошибок

DECLARE @n as INT=<your value here>;

SELECT *
FROM   records
WHERE  comp_date BETWEEN Dateadd(DAY, 15, Dateadd(YEAR, -@n-1, Getdate()))
   AND Dateadd(DAY, 16, Dateadd(YEAR, -@n-1, Getdate())); 

Надеюсь, что помогло;)

0 голосов
/ 02 марта 2012
select * from records where
comp_date = dateadd(year,-n,dateadd(month,-11,dateadd(days, -15, GetDate())));

* assumimg comp_date имеет тип Date.

0 голосов
/ 02 марта 2012

, если comp_date - тип столбца datetime, вам нужно искать в диапазоне (24-часовой диапазон). Кроме того, если вы ищете за 15 дней до n лет назад, запрос должен выглядеть следующим образом:

select * from records where
comp_date >= dateadd(year,-n,dateadd(day, -15, getdate()))
and comp_date < dateadd(year,-n,dateadd(day, -14, getdate()));

Если вы действительно хотите n лет 11 месяцев и 15 дней назад, используйте ответ WOPR.

0 голосов
/ 02 марта 2012

Есть функции для аритметики. Например, Dateadd

(Предполагается, что это Microsoft SQL Server, основанный на тегах вопроса.)

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