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

DateTime в поле Comp (binary(8))

Добавлено: 06 сен 2010, 11:52
ilshat
В таблице PRKACHVO есть поле DTPROBE тип его сапорт показывает как DateTime. Если смотреть MSSQL мэнеджмент студией там binary(8) т.е. вроде как Comp
Мы не можем понять как в Comp запихать DateTime ? Пишем в эту таблицу "снаружи" (негалактическими средствами).

Re: DateTime в поле Comp (binary(8))

Добавлено: 06 сен 2010, 15:47
Vik
Скорее всего так (только предположение по аналогии с типом Date и типом Time):
1 байт (самый младший) : сантисекунды
2 байт : секунды
3 байт : минуты
4 байт : часы
5 байт : день
6 байт : месяц
7-8 байт : год

Для примера код на Java, который преобразует время (тип Time), представленное в виде часов, минут, секунд и сантисекунд в тип integer (не знаю на чем вы пишете, но, думаю, суть будет ясна):

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

public static int toInt(int hour, int minute, int second, int santiSecond)
   {
        return (hour % 24) << 24 | (minute % 60) << 16 | (second % 60) << 8 | (santiSecond % 100);
   }
Скорее всего и DateTime несложно по аналогии преобразовать

Re: DateTime в поле Comp (binary(8))

Добавлено: 06 сен 2010, 16:29
ilshat
Спасибо за наводку. Давно не ковырялся в скалярных функциях живущих в БД Галки на MSSQL. Эту датувремя можно конвертнуть функциями ToMsDateTime и обратно ToAtlDateTime.

Re: DateTime в поле Comp (binary(8))

Добавлено: 06 сен 2010, 17:44
Vik
Еще встречаются в Галактике такие таблицы, в которых дата хранится в типе Comp в сантисекундах (например, таблица RsvOper). Тогда приходилось делать, например, такое преобразование: dbo.toMsDateTime(dbo.fromSEC100(t$RsvOper.f$cRoleAn1)). Но функция fromSEC100 очень медленно работает, во всяком случае на MsSQL.

Re: DateTime в поле Comp (binary(8))

Добавлено: 06 окт 2010, 18:20
savov
А вот что делать, если не MS SQL сервер, а Pervasive? Пробую извлечь поле dtdoc таблицы rezkontr в Delphi, ничего не получается! Как только не пытался. Использовал компонент ADO (причем даже те, которые здесь в опыте выложили). Не могу ни вернуть поле, ни сделать выборку по нему. Подскажите, что можно сделать?

Re: DateTime в поле Comp (binary(8))

Добавлено: 08 окт 2010, 08:08
LaaLaa
Для первасива может попробовать PDAC for RAD Studio 2010 - Design Time Components http://www.pervasivedb.com/psqlv11/Pages/Default.aspx

Сам не пробовал, но может получится.

Re: DateTime в поле Comp (binary(8))

Добавлено: 08 окт 2010, 10:32
savov
Пробовал и PDAC. Поле выводится как bigint (в ADO, PDAC дает ошибку). Пробовал перевести в дату (делил на 1000 (перевод в сек), потом на 60(в минуты), 60 (в часы), 24 (дни)), но получил что-то большую цифру. Может там не в миллисекундах хранится?

Re: DateTime в поле Comp (binary(8))

Добавлено: 08 окт 2010, 11:59
Vik
Ну так bigint недолго перевести в дату. Смотрите выше посты. Хранится не в милисекундах.

Re: DateTime в поле Comp (binary(8))

Добавлено: 13 янв 2017, 09:18
Алексей
ilshat писал(а):Спасибо за наводку. Давно не ковырялся в скалярных функциях живущих в БД Галки на MSSQL. Эту датувремя можно конвертнуть функциями ToMsDateTime и обратно ToAtlDateTime.
Из vip эти функции доступы? У меня не получилось.
Как в vip считать год дату день из поля такого типа?

Re: DateTime в поле Comp (binary(8))

Добавлено: 13 янв 2017, 10:23
edward_K
если у вас сапорт показывает тип DateTime - то без проблем в переменную соотв. типа. Если же как число(longint или comp) , то DateTime(поле). В галактике(и не только) все типы Date|Time|DateTime по сути те же числа, отличаются меж собой упаковкой в биты.

Re: DateTime в поле Comp (binary(8))

Добавлено: 13 янв 2017, 11:04
Den
Если я правильно понял вопрос , то так как то :

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

sql select top 100
   CREATEDATETIME
  ,day(CREATEDATETIME)
  ,month(CREATEDATETIME)
  ,year(CREATEDATETIME)
 from katparty
  where CREATEDATETIME<>0
 ;