Доброго времени суток!
Обнаружил интересную вещь при вычислении интервала дат в часах/минутах
Вроде бы примитивный запрос
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 ничего
по этому поводу не нашел.
С уважением, Евгений