SQL Date Diff без учета года - PullRequest
1 голос
/ 07 марта 2011

Я хочу сделать выбор, где день рождения пользователя (поле даты) составляет менее 30 дней.
Каков наилучший способ сделать это?я попробовал датедифф, но не знаю, как отложить год.

Спасибо

Ответы [ 3 ]

5 голосов
/ 07 марта 2011

Вы можете просто использовать функцию DATEPART с dayofyear значением datepart.

РЕДАКТИРОВАТЬ: честно, в моем предыдущем ответе есть проблема границы (большое спасибо Дэмиен ): например, 2010-12-25 и 2011-01-07 => разница должна быть менее 30 дней, но условие DATEPART(dayofyear, @date) - DATEPART(dayofyear, [Birthday]) < 30 пропустит эту запись. Поэтому я добавил дополнительный ответ к своему ответу:

DATEPART(dy, @d) - DATEPART(dy, [Birthday]) < 30 OR
(
   DATEPART(mm, @d) = 12 AND
   DATEPART(dy, DATEADD(m, 1, @d)) - DATEPART(dy, DATEADD(m, 1, [Birthday])) < 30
)

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

2 голосов
/ 07 марта 2011

Обычным способом является составление отформатированной даты в виде текста и замена года на текущий год; и разобрать в дату. Примените датировку к этому.

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

0 голосов
/ 08 марта 2011
SELECT *
FROM dbo.CheckBirthDay
WHERE (CASE WHEN YEAR(BirthDay) <= YEAR(CURRENT_TIMESTAMP) THEN DATEDIFF(DD,BirthDay,CURRENT_TIMESTAMP) END < 30 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...