21 авг. 2012 г.

РазностьДат в запросе, продолжение

Ранее для определения точного количества лет мне приходилось использовать следующую конструкцию в запросе.
 ГОД(&Дата2) - ГОД(&Дата1) - ВЫБОР
  КОГДА МЕСЯЦ(&Дата2) < МЕСЯЦ(&Дата1)
   ТОГДА 1
  ИНАЧЕ ВЫБОР
   КОГДА МЕСЯЦ(&Дата2) = МЕСЯЦ(&Дата1)
    ТОГДА ВЫБОР
     КОГДА ДЕНЬ(&Дата2) < ДЕНЬ(&Дата1)
      ТОГДА 1
     ИНАЧЕ 0
    КОНЕЦ
   ИНАЧЕ 0
  КОНЕЦ
 КОНЕЦ
Выглядит довольно таки громоздко, легко запутаться в больших запросах. Но если взять  
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, -1), &Дата2, ДЕНЬ) / 365.25 
то мы как раз получим точное количество лет. День отнимаем, чтобы скорректировать погрешность на малых периодах. Если просто делить на 365, то на больших периодах возникает погрешность, вызываемая високосными годами. Деление на 365.25 учитывает эту погрешность на любых периодах.

Комментариев нет:

Отправить комментарий