DateTime в поле Comp (binary(8))
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 222
- Зарегистрирован: 04 июн 2008, 14:35
- Откуда: Стерлитамак
- Контактная информация:
DateTime в поле Comp (binary(8))
В таблице PRKACHVO есть поле DTPROBE тип его сапорт показывает как DateTime. Если смотреть MSSQL мэнеджмент студией там binary(8) т.е. вроде как Comp
Мы не можем понять как в Comp запихать DateTime ? Пишем в эту таблицу "снаружи" (негалактическими средствами).
Мы не можем понять как в Comp запихать DateTime ? Пишем в эту таблицу "снаружи" (негалактическими средствами).
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: DateTime в поле Comp (binary(8))
Скорее всего так (только предположение по аналогии с типом Date и типом Time):
1 байт (самый младший) : сантисекунды
2 байт : секунды
3 байт : минуты
4 байт : часы
5 байт : день
6 байт : месяц
7-8 байт : год
Для примера код на Java, который преобразует время (тип Time), представленное в виде часов, минут, секунд и сантисекунд в тип integer (не знаю на чем вы пишете, но, думаю, суть будет ясна):
Скорее всего и DateTime несложно по аналогии преобразовать
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);
}
-
- Местный житель
- Сообщения: 222
- Зарегистрирован: 04 июн 2008, 14:35
- Откуда: Стерлитамак
- Контактная информация:
Re: DateTime в поле Comp (binary(8))
Спасибо за наводку. Давно не ковырялся в скалярных функциях живущих в БД Галки на MSSQL. Эту датувремя можно конвертнуть функциями ToMsDateTime и обратно ToAtlDateTime.
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: DateTime в поле Comp (binary(8))
Еще встречаются в Галактике такие таблицы, в которых дата хранится в типе Comp в сантисекундах (например, таблица RsvOper). Тогда приходилось делать, например, такое преобразование: dbo.toMsDateTime(dbo.fromSEC100(t$RsvOper.f$cRoleAn1)). Но функция fromSEC100 очень медленно работает, во всяком случае на MsSQL.
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: DateTime в поле Comp (binary(8))
А вот что делать, если не MS SQL сервер, а Pervasive? Пробую извлечь поле dtdoc таблицы rezkontr в Delphi, ничего не получается! Как только не пытался. Использовал компонент ADO (причем даже те, которые здесь в опыте выложили). Не могу ни вернуть поле, ни сделать выборку по нему. Подскажите, что можно сделать?
Re: DateTime в поле Comp (binary(8))
Для первасива может попробовать PDAC for RAD Studio 2010 - Design Time Components http://www.pervasivedb.com/psqlv11/Pages/Default.aspx
Сам не пробовал, но может получится.
Сам не пробовал, но может получится.
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: DateTime в поле Comp (binary(8))
Пробовал и PDAC. Поле выводится как bigint (в ADO, PDAC дает ошибку). Пробовал перевести в дату (делил на 1000 (перевод в сек), потом на 60(в минуты), 60 (в часы), 24 (дни)), но получил что-то большую цифру. Может там не в миллисекундах хранится?
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: DateTime в поле Comp (binary(8))
Ну так bigint недолго перевести в дату. Смотрите выше посты. Хранится не в милисекундах.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: DateTime в поле Comp (binary(8))
Из vip эти функции доступы? У меня не получилось.ilshat писал(а):Спасибо за наводку. Давно не ковырялся в скалярных функциях живущих в БД Галки на MSSQL. Эту датувремя можно конвертнуть функциями ToMsDateTime и обратно ToAtlDateTime.
Как в vip считать год дату день из поля такого типа?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: DateTime в поле Comp (binary(8))
если у вас сапорт показывает тип DateTime - то без проблем в переменную соотв. типа. Если же как число(longint или comp) , то DateTime(поле). В галактике(и не только) все типы Date|Time|DateTime по сути те же числа, отличаются меж собой упаковкой в биты.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: DateTime в поле Comp (binary(8))
Если я правильно понял вопрос , то так как то :
Код: Выделить всё
sql select top 100
CREATEDATETIME
,day(CREATEDATETIME)
,month(CREATEDATETIME)
,year(CREATEDATETIME)
from katparty
where CREATEDATETIME<>0
;