Страница 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
;