Страница 1 из 1

ХП DateTime(float) в TimeStamp

Добавлено: 06 фев 2007, 14:51
Leons
Перерыл много чего, потерял время но так и не откапал... Как можно преобразовать в ХП DateTime(float) в TimeStamp?

Добавлено: 06 фев 2007, 15:14
Dimitry Sibiryakov
Прибавить к какому-то другому тимештампу. А откуда ты его такого, плавающего, берешь? Может, проще преобразовать еще "на пути" в ХП?..

Добавлено: 06 фев 2007, 15:27
Leons
Прежний разработчик БД все даты хранит в DOUBLE PRECISION.
Надо данные перенести из одной TABLE с датой в формате DOUBLE PRECISION в другую, где дата хранится именно в TimeStamp

Добавлено: 06 фев 2007, 15:37
Merlin
Leons писал(а):Прежний разработчик БД все даты хранит в DOUBLE PRECISION.
В смысле, хранил? Надеюсь, его уже повесили?

Добавлено: 06 фев 2007, 15:38
WildSery
1. Выяснить точку отсчёта - т.е. какой датой является 0.0. Предположим, это '01.01.1600' (абсолютно не важно).
2. К этой дате прибавляем double, как

Код: Выделить всё

CAST('01.01.1600' as timestamp) + DoubleFieldDate

Добавлено: 06 фев 2007, 15:50
Leons
Вот что я откапал. Так он по ходу дела и преобразовывал дату в непойми что...

Код: Выделить всё

CREATE PROCEDURE GET_TIMESTAMPASFLOAT (
    DATETIME TIMESTAMP)
RETURNS (
    RESULT DOUBLE PRECISION)
AS
DECLARE VARIABLE D DATE;
DECLARE VARIABLE T TIME;
begin
  d=datetime;
  t=datetime;
  result=cast((t-cast('0:00:00' as time)) as float)/86400;
  result=cast((d-cast('30.12.1899' as date)) as integer)+result;
  suspend;
end^
Обратно пытался переконвертить - постоянные ошибки. Пока что не очень дружу с ХП

Добавлено: 06 фев 2007, 16:08
WildSery
Значит, ПравильнаяДата = cast('30.12.1899' as timestamp) + result
И никаких ХП тут не надо.

Добавлено: 06 фев 2007, 16:13
Leons
Я тут такух ХП нагородил, а оказывается одной строчкой все можно сделать! \:D/