Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Кодировка даты!  [new]
Like
Member

Откуда: Донецк
Сообщений: 134
Подскажите, пожалуйста!
Есть dbf файл с датами, но они закодированы (для уменьшения длины) символами. Как в sql server можно их раскодировать?
13 янв 05, 12:16    [1241634]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Узнать у того, кто кодировал, алгоритм кодировки и реализовать его на TSQL
13 янв 05, 12:18    [1241644]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Like
Member

Откуда: Донецк
Сообщений: 134
Кодируют поставщики задачи, они не расскажут.
13 янв 05, 12:24    [1241687]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Like
Кодируют поставщики задачи, они не расскажут.
Если не расскажут, тогда может быть и хранить их как есть - в символьном виде, пусть им же и хуже будет...
13 янв 05, 12:27    [1241698]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Like
Member

Откуда: Донецк
Сообщений: 134
Вообще, задача под dos. Но мне нужно работать с этим файлом, он хранит все данные о сотрудниках, а в dos не хочется. Поставщикам все равно. Им наоборот выгодно, что бы мы не могли работать с файлами, чтобы все отчеты заказывали у них.
13 янв 05, 12:32    [1241731]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Т.е. вы предлагаете решить задачу при следующих входных данных

Имеется закодированная строка, содержащая дату.
Попробуйте взломать этот код.
13 янв 05, 12:35    [1241743]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Like
Member

Откуда: Донецк
Сообщений: 134
Как?
13 янв 05, 12:38    [1241763]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Как как ?
Путем совмещения монтировки и головы создателя алгоритма.
Или для начала можно предложить ему пива, чипсов или денег.

Если не поможет то придется открывать Гугль и искать информацию об алгоритмах шифрациии/дешифрации/взлома. Потом пытаться реализовать эти алгоритмы.
Существенно облегчит задачу если вам будет известно как для конретных значений даты выглядит их зашифрованное значение.
13 янв 05, 12:44    [1241798]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Like
Member

Откуда: Донецк
Сообщений: 134
Не очень смешно почему-то.
Но если есть программа под dos для работы с dbf файлами и в ней есть функция, которая преобразует дату. То и в sql server возможно есть такая функция. Но если нет, то так бы сразу и сказали.
13 янв 05, 12:49    [1241822]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
ААА!!! в MS Word есть работа над ошибками, слова с ошибкой подчеркиваются красным... ПОЧЕМУ В MS SQL SERVER НЕТ ТАКОГО??? ОДНА КОМПАНИЯ ДАЖЕ!!! СТОЛЬКО ОШИБОК ДОПУСКАЮ, А МНЕ ПОТОМ ГОЛОВУ ОТРЫВАЮТ... ААААААА...


для спящего время бодрствования равносильно сну
13 янв 05, 12:51    [1241833]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Glory
Member

Откуда:
Сообщений: 104760
и в ней есть функция, которая преобразует дату.
Ага. Только написал ее создатель алгоритма шифрации.
А для sqlserver он ее почему-то не написал. Так ему и скажите, что это большой минус для его программы.
13 янв 05, 12:51    [1241836]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Like
Member

Откуда: Донецк
Сообщений: 134
Спасибо, что объяснили.
13 янв 05, 12:57    [1241852]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Like
Member

Откуда: Донецк
Сообщений: 134
Спасибо, что объяснили.
13 янв 05, 12:58    [1241856]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
N_A
Member

Откуда: Калининград
Сообщений: 259
Если дата не зашифрована, а закодирована по какомуто алгоритму, то можно попробовать разгадать этот алгоритм сопоставляя даты в программе и строчки в дбф.
ИМХО при этом не происходит нарушение закона или чьих-то прав.
Если конечно алгоритм не запатентован!
13 янв 05, 13:54    [1242100]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
aleks2
Guest
Есть предположение, что это просто "дата формата dbf (или иного стандартного формата)", ибо трудно представить себе "злобных разработчиков" шифрующих дату, чтобы досадить клиенту (и себе).
13 янв 05, 14:05    [1242161]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Glory
Member

Откуда:
Сообщений: 104760
aleks2
Есть предположение, что это просто "дата формата dbf (или иного стандартного формата)", ибо трудно представить себе "злобных разработчиков" шифрующих дату, чтобы досадить клиенту (и себе).

Акак же тогда "но они закодированы (для уменьшения длины) символами"
13 янв 05, 14:09    [1242170]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Like
Но если есть программа под dos для работы с dbf файлами и в ней есть функция, которая преобразует дату. То и в sql server возможно есть такая функция. Но если нет, то так бы сразу и сказали.

В sql server, безусловно, есть функции работы с датами. И есть преобразование даты к символьному представлению. Но эти функции не являются кодированием/шифрацией значений.

Как разработчики преобразуют дату в набор символов, sql server знать не может, так ведь? Вот пишут они функцию, которая из даты "13 января 2005" делает строку "абырвалг". В целях экономии и/или шифрования. А потом вы начинаете спрашивать - "как, у сиквела нет функции, которая бы "абырвалг" расшифровала?". Угу, нет такой функции.
13 янв 05, 14:19    [1242201]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
aleks2
Guest
Glory
aleks2
Есть предположение, что это просто "дата формата dbf (или иного стандартного формата)", ибо трудно представить себе "злобных разработчиков" шифрующих дату, чтобы досадить клиенту (и себе).

Акак же тогда "но они закодированы (для уменьшения длины) символами"


Кодирование для уменьшения длины обычно предполагает БИНАРНОЕ представление даты, а символы непродвинутый программист видит когда сервер преобразует это бинарное представление в строку (сервер ведь не знает что это такое).
Те, что постарше еще помнят представление даты, используемое во времена DOS (двухбайтовый формат), из которого потом вылезла проблема 2000 года...
----------------
тов. следует привести двоичное значение поля даты из DBF и значение даты "как его показывает программа DOS" в кол-ве 3-4 экземпляра.
13 янв 05, 14:27    [1242236]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кодирование для уменьшения длины обычно предполагает БИНАРНОЕ представление даты, а символы непродвинутый...
Это только ВАШЕ предположение.
13 янв 05, 14:29    [1242255]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
aleks2
Guest
GreenSunrise
Like
Но если есть программа под dos для работы с dbf файлами и в ней есть функция, которая преобразует дату. То и в sql server возможно есть такая функция. Но если нет, то так бы сразу и сказали.

В sql server, безусловно, есть функции работы с датами. И есть преобразование даты к символьному представлению. Но эти функции не являются кодированием/шифрацией значений.



А интересно, чем же они являются? Ведь дату (datetime) сервер хранит как float, где
целая часть = число дней начиная с дня.месяца.года (наизусть не помню)
дробная часть = число n,nnn (наизусть не помню) миллисекунд начиная с 00:00:00.

на мой взгляд сие сильно отличаеся от привычного представления даты =>
налицо кодирование.
13 янв 05, 14:32    [1242273]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
aleks2
Guest
Glory
Кодирование для уменьшения длины обычно предполагает БИНАРНОЕ представление даты, а символы непродвинутый...
Это только ВАШЕ предположение.


Да это мое предположение, но оно не голословно, а базируется на знакомстве с алгоритмами сжатия данных.

Ибо уменьшение длины <=> отсутствию неиспользуемых (избыточных) двоичных разрядов представления данных.
13 янв 05, 14:35    [1242290]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ведь дату (datetime) сервер хранит как float
Дату сервер _хранит_ как два интегера.

ЗЫ
И в dbf согласно стандарту дата хранится в виде yyyymmdd

Да это мое предположение, но оно не голословно, а базируется на знакомстве с алгоритмами сжатия данных.
Я не говорил что оно голословно. Я выразил сомнение что в одназначности предположеия что "ибо трудно представить себе "злобных разработчиков" шифрующих дату, чтобы досадить клиенту (и себе)."
_Шифруют_ обычно не с досады а с определенной целью.

А любое сжатие с выигрышом в месте хранения неизбежно влечет за особой проишгрыш в скорости извлечения. Так что я в свою очредь сомневаюсь что "злобные разработчики" послали нафиг производительность и озаботились местом на диске
13 янв 05, 14:55    [1242330]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
aleks2
Guest
Glory
Ведь дату (datetime) сервер хранит как float
Дату сервер _хранит_ как два интегера.

ЗЫ
И в dbf согласно стандарту дата хранится в виде yyyymmdd


Позволю себе остаться при своем мнении:
select  Cast( FLOOR(Cast(getdate() as float)) as datetime)

c dbf не знаком.

ПРИМЕЧАНИЕ :
FLOOR
Returns the largest integer less than or equal to the given numeric expression.
Syntax
FLOOR ( numeric_expression )
Arguments
numeric_expression
Is an expression of the exact numeric or approximate numeric data type category, except for the bit data type.
Return Types
Returns the same type as numeric_expression.


Было бы более последовательно утверждать, что а вашем месте
Дату сервер _хранит_ как binary(8).


Glory

А любое сжатие с выигрышом в месте хранения неизбежно влечет за особой проишгрыш в скорости извлечения. Так что я в свою очредь сомневаюсь что "злобные разработчики" послали нафиг производительность и озаботились местом на диске


Шифрование - это тоже затраты времени и немалые.
13 янв 05, 15:13    [1242408]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка даты!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Позволю себе остаться при своем мнении:
select Cast( FLOOR(Cast(getdate() as float)) as datetime)

И ваш запрос показывает как сервер _хранит_ тип datetime ?
Или все таки то что MSSQL умеет преобразовывать типы данных ?

BOL
Remarks
Values with the datetime data type are stored internally by Microsoft SQL Server as two 4-byte integers. The first 4 bytes store the number of days before or after the base date, January 1, 1900. The base date is the system reference date. Values for datetime earlier than January 1, 1753, are not permitted. The other 4 bytes store the time of day represented as the number of milliseconds after midnight.



Шифрование - это тоже затраты времени и немалые.
Да. Но одно дело требование к секретности данных. Другое - к занимаемому месту. А т.к. мотивы разработчиков конкретного приложения нам неизвестны, то все что мы говорим - это гадание на кофейной гуще
13 янв 05, 15:19    [1242441]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить