Я работаю с более старой базой кода, где краткость не встречается во многих местах.Являются ли эти две части кода SQL одинаковыми?
Один фрагмент кода, который мы постоянно используем в базе данных, состоит в том, чтобы определить, находятся ли две даты в одном и том же программном году. Например, программа Год 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))'
Перед тем, как перейти введения новых ошибок в системе, которая «просто работает» , Я бы хотел спросить об этом. Являются ли эти два кода одинаковыми? Будут ли они всегда давать одинаковый результат (при условии действительных дат)?
+1 ... все еще не убежден, что последняя форма одинаков, но даже если это так, она получит серьезный удар по производительности, поскольку она не сможет использовать индексы на EnrollmentDate с пользой (если вообще) , –