Gaurav_Chaudhary Ответов: 1

Datepart возвращает другой день года для одной и той же даты рождения?


Всем Привет

Я запрашиваю игроков, чей день рождения наступит в течение следующих 7 дней в Sql server


select TOP 100 Percent PlayerID from vwPlayer WITH(NOLOCK) where ISDATE(answer)=1 AND datepart(dy,CONVERT(datetime,Answer)) > DatePart(dy,GetDate()) AND datepart(dy,CONVERT(datetime,Answer)) < DatePart(dy,DateAdd(dy,7,GetDate())) 


но результаты не согласуются как

print datepart(dy,'09/01/1999')--244
print datepart(dy,'09/01/2000')--245
print datepart(dy,getdate()) -- 245


Так,
DatePart function returning different day of the year for same birthdate


Как точно запросить игроков, чей день рождения наступит в течение следующих 7 дней

Спасибо!

Что я уже пробовал:

Вычислите день года по дате рождения игрока и проверьте, лежит ли он в currentdate и currentdate + 7 дней
но datepart возвращает другой номер дня для одной и той же даты рождения 09/01/1999 и 09/01/2000

Mehdi Gholam

Попробуйте формат гггг-ММ-ДД, например, 1999-09-01

1 Ответов

Рейтинг:
8

OriginalGriff

2000 год был високосным годом, поэтому был добавлен дополнительный день: 29 февраля 2000 года, что означает, что день года переместится на один. Попробуйте это и вы поймете, что я имею в виду:

print datepart(dy,'02/28/1999')
print datepart(dy,'03/01/1999')
print datepart(dy,'02/28/2000')
print datepart(dy,'02/29/2000')
print datepart(dy,'03/01/2000')


"Спасибо, так что мне нужно сделать пользовательскую функцию, чтобы проверить, есть ли leapyear = true и Month > 2, а затем добавить day=day+1 или есть ли какая-либо встроенная функция в Sql server."


Попробуйте перенести год DOB на этот год и проверить количество дней:
DECLARE @DOB as DATE
SET @DOB = '1999-09-24'
PRINT DATEDIFF(dd, GETDATE(), DATEADD(yy,DATEPART(yy, GETDATE()) - DATEPART(yy, @DOB) ,@DOB))


[no name]

Спасибо,
Так что мне нужно сделать пользовательскую функцию, чтобы проверить, есть ли leapyear = true и Month > 2, а затем добавить day=day+1 или есть ли какая-либо встроенная функция в Sql server.

OriginalGriff

Ответ обновлен

[no name]

+5 OriginalGriff Потрясающе! Спасибо снова