Показаны сообщения с ярлыком РазностьДат. Показать все сообщения
Показаны сообщения с ярлыком РазностьДат. Показать все сообщения

21 авг. 2012 г.

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

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

22 июн. 2012 г.

Количество лет в запросе

Недавно возникла необходимость получить точное количество лет в запросе, результат функции РазностьДат выдавал некорректный результат в ряде случаев. Например, РазностьДат(31.12.2011, 01.01.2012, ГОД) равно 1, хотя на самом деле количество целых лет должно быть равно 0.