22 июн. 2012 г.

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

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

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

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

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