Целочисленное преобразование Firebird как время или дата

У меня есть таблица, в которой хранится количество секунд как целое число. Я хочу отобразить его и использовать как время или дату.

Если я напишу это:

Select Cast(ColAmountofSeconds as Time) as ThisTime From MyTable;

то же самое с:

Select Cast(ColAmountofSeconds as Date) as ThisTime From MyTable;

Я получаю следующую ошибку:

Произошло переполнение во время преобразования типа данных. ошибка преобразования из строки "14".

Примечание. «14» — это значение первой строки в столбце ColAmountofSeconds.

Это настолько естественно для SQL Server, что я не могу поверить, сколько времени я потратил на выяснение этого.

ИЗМЕНИТЬ

Я не могу поверить, что это ответ:

Update MyTable
Set TIMESPENT =  time '00:00:00' + ColAmountOfSeconds;

person Craig Stevensson    schedule 28.01.2013    source источник
comment
time '00:00:00 — это сокращенное приведение, эквивалентное CAST('00:00:00' AS TIME).   -  person Mark Rotteveel    schedule 28.01.2013


Ответы (1)


Firebird функция приведения не поддерживает преобразование числового значения в дату, время или метка времени.

Вы можете воспользоваться тем фактом, что Firebird поддерживает арифметику между датами и числовыми значениями, поэтому вы можете написать свой запрос следующим образом:

select dateadd(second, ColAmountOfSeconds, cast('00:00:00' as time))
  from myTable;

--or the equivalent:

select cast(cast('2013-01-01' as timestamp) + cast(ColAmountofSeconds as double precision) / 86400 as TIME)
  from myTable;
person jachguate    schedule 28.01.2013
comment
Да, вы правы, вы написали в то же время, когда я редактировал свой вопрос. - person Craig Stevensson; 28.01.2013