Доброго времени суток!
Dmitry Yemanov wrote:
Разность дат в 1-м диалекте есть double, а в третьем это NUMERIC(18,9).
Именно из-за отбрасывания цифр после 9-го знака и получается такой
результат.
Спасибо за объяснение. Что-то меня совсем заклинило - подумал, что уж
NUMERIC должен давать точную разность.
В вышеприведенных примерах достаточно округлить до десятитысячных
секунд, чтобы получить точную разность. Всегда ли это так?
Оценим погрешность вычислений. Поскольку даты представляются точно,
а разность - до 9 знака после запятой, то искомая величина в секундах
составит
d = дробная
часть(разность_в_десятитысячных_секунд/86400/10^4*10^9)*86400/10^9
=дробная часть(разность_в_десятитысячных_секунд/0.864)*0.864*10^(-4)
Для 4167 значений из 1 возможных получаем, что d 0.5*10^-4 секунды
и не может быть ликвидирована округлением.
Пример
Дата1=28.04.2007 22:59:59
Дата2=28.04.2007 22:59:59.0019
Разница в десятитысячных секунд=18,144
Получаем ошибку в 1 десятитысячную секунды. Т.е. для вычисления точной
разности между датами в 3-м диалекте все же нужна самописная UDF
С уважением, Евгений.