sasha wrote:

Задача: есть поле TIMESTAMP, есть временной интервал в минутах INT. Надо из времени вычесть интервал.

Хотел было написать что-то типа

SELECT
  CURRENT_TIMESTAMP
  - (CURRENT_DATE - CAST(:DATE / 1440 AS INTEGER))
  - (CURRENT_TIME - :DATE - CAST(:DATE / 1440 AS INTEGER) * 1440)
FROM RDB$DATABASE;

Знаешь, третий диалект, он вообще от лукавого (2 ДК - ;) ). Но идея, думаю, такова. Вычитать таймштампы разрешают, видимо, потому, что стандарт определяет результат как тип INTERVAL, которого у нас нету ещё, и который заменяется лукаво на DOUBLE, типа интуитивно понятно, что это есть временной интервал в дробных днях. Результат деления-умножения же любого из типов этого типа (каламбурчик-с!) с понятием интервала ну никак не связывается, посему оно и запрещено. Почему нельзя из таймштампа вычесть дату и получить всё тот же интуитивный интервал, мне лично неясно. Почему нельзя время - ясно, тут по смыслу опять интервалом и не пахнет, время, в отличие от даты не есть точка на шкале времени (опять каламбурчик-с!). Вычесть из такой точки можно только то, что является либо такой же точкой, и получить интервал, либо может быть трактовано как интервал и получить тогда точку. Прибавить можно только интервал. Прояснил или запутал? Такшта получи интервал где-нить в сторонке как сумеешь и его уже и вычитай.

--
Regards. Ded.

Ответить