Доброго времени суток!

Обнаружил интересную вещь при вычислении интервала дат в часах/минутах

Вроде бы примитивный запрос

select start_date,end_date,
       CAST((end_date-start_date)*24-0.5 AS INTEGER) as Hours,
       CAST((end_date-start_date)*60*24-0.5 AS INTEGER)-
       60*CAST((end_date-start_date)*24-0.5 AS INTEGER) as Minutes,
       (end_date-start_date)*86400*10000 As Tenthousandth
from table_dates

в 1-м диалекте возвращает       

Дата1=28.04.2007 23:59:59       
Дата2=29.04.2007 22:59:58.9999
Разница в часах, минутах=22:59
Разница в десятитысячных секунд=827999999

Дата1=28.04.2007 23:59:59       
Дата2=29.04.2007 22:59:59
Разница в часах, минутах=23:00
Разница в десятитысячных секунд=828000000

Все понятно и логично.

В 3-м диалекте

Дата1=28.04.2007 23:59:59       
Дата2=29.04.2007 22:59:58.9999
Разница в часах, минутах=22:59
Разница в десятитысячных секунд=827999998,8480


Дата1=28.04.2007 23:59:59       
Дата2=29.04.2007 22:59:59
Разница в часах, минутах=22:59
Разница в десятитысячных секунд=827999999,7120

Вроде бы дата хранится как 2 INTEGER или
я что-нибудь не понимаю? Смотрел на 1.5.4 и 2.0.1

Разумеется, можно, сделать CAST((end_date-start_date)*86400*10000 AS INTEGER) и дальше использовать его в расчетах, но это несколько некрасиво. Я, конечно, понимаю, что лучше использовать UDF, но хотелось бы для себя выяснить причину такого поведения. В RN ничего по этому поводу не нашел.

С уважением, Евгений

Ответить