Я работаю с более старой базой кода, где краткость не найдена во многих местах.
Один фрагмент кода, который мы постоянно используем в базе данных, заключается в определении того, находятся ли две даты в одном программном году. Например, программный год 2011 начинается 1 июля 2011 года и заканчивается 1 июля 2012 года (или технически днем ранее)
Обычно я вижу, что эта проблема решается с помощью кода такого типа:
if Month(@EnrollmentDate)>=7 begin
set @StartDate='07/01/'+LTRIM(RTRIM(Year(@EnrollmentDate)))
set @EndDate='07/01/'+LTRIM(RTRIM(Year(@EnrollmentDate)+1))
end else begin
set @StartDate='07/01/'+LTRIM(RTRIM(Year(@EnrollmentDate)-1))
set @EndDate='07/01/'+LTRIM(RTRIM(Year(@EnrollmentDate)))
end
...
where (ENROLLMENTDATE >= @StartDate and ENROLLMENTDATE < @EndDate)
Мне недавно пришлось решить эту проблему, и мгновение, которое появилось в моей голове, было чем-то гораздо более кратким:
where year(dateadd(mm,-6,ENROLLMENTDATE)) = year(dateadd(mm,-6,@EnrollmentDate))'
Прежде чем я начну вносить новые ошибки в систему, которая "просто работает", я бы хотел спросить об этом SO. Являются ли эти две части кода одинаковыми? Будут ли они всегда давать один и тот же результат (при условии правильной даты)?