ХП DateTime(float) в TimeStamp

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
Leons
Сообщения: 29
Зарегистрирован: 24 фев 2006, 08:29

ХП DateTime(float) в TimeStamp

Сообщение Leons » 06 фев 2007, 14:51

Перерыл много чего, потерял время но так и не откапал... Как можно преобразовать в ХП DateTime(float) в TimeStamp?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 06 фев 2007, 15:14

Прибавить к какому-то другому тимештампу. А откуда ты его такого, плавающего, берешь? Может, проще преобразовать еще "на пути" в ХП?..

Leons
Сообщения: 29
Зарегистрирован: 24 фев 2006, 08:29

Сообщение Leons » 06 фев 2007, 15:27

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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 06 фев 2007, 15:37

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 06 фев 2007, 15:38

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

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

CAST('01.01.1600' as timestamp) + DoubleFieldDate

Leons
Сообщения: 29
Зарегистрирован: 24 фев 2006, 08:29

Сообщение Leons » 06 фев 2007, 15:50

Вот что я откапал. Так он по ходу дела и преобразовывал дату в непойми что...

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

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^
Обратно пытался переконвертить - постоянные ошибки. Пока что не очень дружу с ХП

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 06 фев 2007, 16:08

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

Leons
Сообщения: 29
Зарегистрирован: 24 фев 2006, 08:29

Сообщение Leons » 06 фев 2007, 16:13

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

Ответить