Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранение дат за любой период / 25 сообщений из 29, страница 1 из 2
23.10.2002, 08:52:57
    #32061016
MarchCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Господа!
Я давно мучаюсь одной проблемой.
Хранение дат за любой период.
пример: 4 т.л. д.н.э. или 9й Сезон дождей, ну, или 400 лет, и еще 01.01.00
Естественно потом нужен, будет поиск.

Какие есть мысли на этот счет. Интересует все! От типов данных до тонкостей поиска.

ЗЫ Для чего это нужно не спрашивать, котячий секрет!
...
Рейтинг: 0 / 0
23.10.2002, 09:17:26
    #32061021
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Храни всё отдельно. Если с эрой достаточно до НЭ / после НЭ, то можно обойтись знаком века или битовым полем. Если еще требуется разделять на мезозойскую, кайнозойскую и т.д. плюс периоды (юрский, меловой и т.д.), то отдельные поля типа tinyint под период и под эру.
Отдельно год, отдельно месяц и отдельно день.
...
Рейтинг: 0 / 0
23.10.2002, 09:49:28
    #32061037
sql
sql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Насколько я понял, для начала можно предложить любое решение. Поэтому - самое простое: вместо type datetime with 01.01.1753 использовать три поля: {year int, month int, day int}. А дальше сама задача подскажет.
...
Рейтинг: 0 / 0
23.10.2002, 10:18:11
    #32061050
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
2sql
Хранить в трёх полях неудобно - плохо будут выполняться поиски по диапазонам.
2MarchCat (если это не шутка)
Тут, собственно, нужен хотя-бы намёк на задачу.
1. Если нужно хранить просто дату, то хороший дипаазон даст тип bigint и значение в днях.
2. Если при таком диапазоне необходима точность лучьше, чем сутки, то decimal и значение в днях и долях дней.
3. Если нужно хранить именно такое представление (4 т.л. д.н.э. или 9й Сезон дождей, ну, или 400 лет, и еще 01.01.00), тогда, может, иметь ещё поле типа представления?
...
Рейтинг: 0 / 0
23.10.2002, 11:00:18
    #32061075
sql
sql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
с учётом MarchCat>Хранение дат за любой период.
и alexeyvg>1. Если нужно хранить просто дату, то хороший дипаазон даст тип bigint и значение в днях.

вопрос, кажется, в алгоритме получения даты из type bigint ?
...
Рейтинг: 0 / 0
23.10.2002, 11:04:25
    #32061077
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
А вообще, есть целая теория хронологических баз данных, со своими правилами и закидонами... Можно про это хотя бы у Дейта почитать.
...
Рейтинг: 0 / 0
23.10.2002, 11:11:20
    #32061081
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
2sql
Ф-ции получения частей даты и представления даты нужно будет написать самому. Я думаю, найти алгоритм несложно (или даже придумать).
...
Рейтинг: 0 / 0
23.10.2002, 11:33:45
    #32061095
sql
sql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
> Александр Гладченко
Постараюсь, конечно, почитать, - здесь у меня большой пробел. Но не могли бы Вы какую нибудь ссылку о теории хронологических баз данных ?
...
Рейтинг: 0 / 0
23.10.2002, 12:18:38
    #32061113
MarchCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Мы привыкли к точной дате ... но когда нужно записать дату типа 6 т.л. д.н.э. то тут бы в тысячелетии не ошибиться. Так же мы привыкли записывать даты в нашем григорианском стиле, а слабо записать летоисчисление Майя или календарь лун.

Все это должно быть и удобно в первую очередь для дальнейшего поиска.

Задача: произошло событие, нужно его записать, вы это считаете, что это было тогда-то, записали. Я считаю, что это было тогда-то. А третий вообще записал, что это было в год ягуара.

Понятно, что для дальнейшего поиска нужно все приводить к одному типу (дни, года, столетия, тысячелетия)

Прошу высказываться всех. Один кот хорошо, а много лучше.

С уважением, МЯФ.
...
Рейтинг: 0 / 0
23.10.2002, 12:27:28
    #32061117
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Незнаю конечно накой такая система надо,но как по мне,то таблу соотсетствия всех систем исчесления к григорианскому а б конечно создал,и перед вставкой события приводил бы все к нормальному виду и просто держал бы поле откуда приплыла ета дата,или таблу статистики какуето.
...
Рейтинг: 0 / 0
23.10.2002, 12:48:44
    #32061140
Left Margin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Приводить к одному типу, это хорошо, и соответствие различных систем счисления, тоже. А вот что будет являться точкой отсчета, через которую и будет осуществляться эта самая связь\приведение? Рождество Христово? Большой взрыв? Или мой, скажем, день рождения?
...
Рейтинг: 0 / 0
23.10.2002, 12:56:05
    #32061154
MarchCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Скорее всего, Рождество Христово. Я привязан к пониманию (пользователей) людей. Как им удобно для понимания, так и будет. )
...
Рейтинг: 0 / 0
23.10.2002, 15:10:48
    #32061266
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
вообщето привести дату к рожеству христову всегда можно....
я бы за точку отсчета взял наименьшую возможную дату...
посчитал бы порядок числа по сегодняшнее число с запасом вперед....
вот и определился бы в чем хранить....
диапазон выбрать легко... индексировать тож....
да и в будующем легко добавить разрядность (если доживем до такой даты)..... ;))
...
Рейтинг: 0 / 0
23.10.2002, 15:12:26
    #32061268
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
sql <- А я и привёл ссылку, книга Дейта: "Введение в системы баз данных". 7 издание. Издательство ВИЛЬЯМС, 2001г.
Краткое содержание
Книга сейчас есть в продаже и я её все очень рекомендую почитать...
...
Рейтинг: 0 / 0
23.10.2002, 18:35:27
    #32061359
TBB
TBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
"...рассматриваем язык SQL3, мягко говоря, как какое-то недоразумение, как бы его ни защищали..." (Первый абзац приложения Б, стр.1041 этой книги Дейта)

ИМХО Крис (с соавторами) хорош, но морально устаревает не по дням, а по часам. Одни только использования идентификаторов навроде DEPT# чего стоят...
...
Рейтинг: 0 / 0
23.10.2002, 21:02:25
    #32061382
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Отрывок из статьи, которую я все же когда-нибудь допишу
==============
Для начала посмотрим, что это за зверюга такой, дэйттайм. Открываем бестселлер всех времен и народов и читаем, что этот тип данных позволяет хранить календарные даты начиная с 1 января 1753 года до 31 декабря 9999 года.

Интересно, а почему диапазон такой странный? Посмотрим-ка, как это выглядит в числах. -53690 и 2958463. Ничего особенного. Что же это за год такой знаменитый? Придется освежить свое знание истории. Вот, нашел. Англия, восточное побережье США, штаты Вашингтон и Орегон в 1752 году перешли с юлианского на григорианский календарь. Обидно за Техас, Неваду и Калифорнию, которые это сделали в 1582 году по примеру Испании, Италии, Португалии, Польши, Франции, Нидерландов.

Так что если Вам придется писать прогу для историков, то не забудьте, что разные страны переходили с одного календаря на другой в разное время. Дольше всех держалась Греция. Она перешла на григорианский календарь только в 1924 году. В этот год у греков сразу после 9 марта наступило 24. В России февраль 1918 года начался с 14 числа. Но круче всех дела обстояли в Канадской Новой Шотландии. 13 октября 1605 года они приняли григорианский календарь. 13 октября 1710 вернулись к юлианскому, прыгнув назад на 11 дней, а 2 сентября 1752 снова григорианский и прыжок вперед на 14 сентября.

А что же для DateTime является нулем? 1 января 1900 года.
Все ясно. Памятник двадцатому веку, веку изобретения компьютеров.
========================
Теперь по существу.

Первый вариант.
В одном поле хранить номер тысячелетия, а во втором – дату в этом тысячелетии
Второй вариант
Принять за ноль 7000 год до н.э.
...
Рейтинг: 0 / 0
24.10.2002, 10:25:32
    #32061438
ALK
ALK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
если речь идет об периодах соразмерных с историей человечества то за ноль можно принять и начало нашей эры :

хранить в поле типа bigint
отрицательные значения - значит до нашей эры.

зная смещение от принятой в SQL начальной даты в 1900 лет для получения абсолютной даты можно будет вычислять год и день используя стандартные функции даты.

конечно для расчета даты в меловом периоде такой способ
может не подойти , но наверное с точностью до дня такая дата вряд ли кого заинтересует.

интересно на какой период хватит bigint ...
...
Рейтинг: 0 / 0
24.10.2002, 11:03:15
    #32061447
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Присоединяюсь к Cat2
в двух полях, календарь - григорианский

так
milenium int --тысячелетие (отрицательное значение - Д.Н.Э.)
date datetime --точная дата в пределах тысячелетия 01.01.00 - 31.12.999

или так
century int --столетие (отрицательное значение - Д.Н.Э.)
date smalldatetime --точная дата в пределах столетия 01.01.00 - 31.12.99

Остаётся только сделать UDF-ы для преобразования в различные представления и системы летоисчисления.

Если завести индекс по связке полей, при этом поиск и сортировка будет работать идеально.

А мысль интересная, загнать всю историю человечества в БД и сделать OLAP на её основе. Такие интересные срезки можно сделать! Например, какие племена жили на территории Европы, в тот момент, когда китайцы изобрели порох. :)
...
Рейтинг: 0 / 0
24.10.2002, 11:07:46
    #32061450
sql
sql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
мне кажется:
1. Понятие [дата] должно быть расширено, т.к. существуют события, для которых такая временная длительность неприменима. Например, [дата рождения планеты Земля].
2. Отказаться от абсолютных значений дат. Дата имеет смысл только для выбранного способа интерпретации - тип календаря, и т.д.
3. получается не набор полей а некая структура таблиц.

Но всё это, похоже, благие намерения. Хотелось бы услышать уточнённую задачу (второе приближение).
...
Рейтинг: 0 / 0
24.10.2002, 11:40:44
    #32061468
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
TBB <- Это Вы имеете ввиду, что реляционная теория морально устаревает? Ей то всего то лет 30 отроду, для теории это можно сказать золотое детство...
...
Рейтинг: 0 / 0
24.10.2002, 11:56:59
    #32061478
Оля
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Добрый день!

Если по теории- шкала времени -это интервальная шкала.
Поэтому дата -это точка нта шкале, а число лет (например 400) лет - это отрезок интервальной шклы измеренный в единицах измерения этой шкалы.
Отсюда и пляшите :-))
Т.е. точка привязки и единица измерения. А, исходя из этого, стройте шкалы времени, единицы измерения и преобразования из одной шкалы времени в другую.
Отсюда видно, что SQL поддерживает одну из шкал времени и разработан для него тип данных.
Для других шкал времени в идеале неоходимо разработать пользовательский тип данных.
Удачи!
...
Рейтинг: 0 / 0
24.10.2002, 13:22:31
    #32061540
TBB
TBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Александр Гладченко: Вы имеете ввиду, что реляционная теория морально устаревает?

Нет. Я имею в виду, что сам Дейт морально устаревает и не поспевает за подросшим ребенком, которому 30 годиков...
...
Рейтинг: 0 / 0
24.10.2002, 14:04:57
    #32061558
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
Если по теории- шкала времени -это интервальная шкала
плюс - минус бесконечность. Поэтому точка привязки всё равно нужна. Так чем же плохо рождество Христово? И такая ли это интервальная шкала?

Единица измерения вроде бы есть - день и кратные ему величины - час, минута, секунда - величина постоянная и легко вычисляемая (солнце взошло 1 раз - 1 день). Но с другой стороны есть ещё одна единица измерения - год, т.е. время оборота земли вокруг солнца - вот здесь с вычислениями посложнее, поэтому и появились корректировки в виде григореанского календаря. Другой вопрос как связать отношение вращения земли вокруг своей оси и земли вокруг солнца. Сейчас это соотношение равно 365,25 (по григорианскому календарю), возможно раньше оно было иным 365 (по юлианскому календарю), а возможно оно постоянно и это была лишь ошибка вычисления. Вообще есть мнение, что это отношение не постоянное, а зависит от миллиона различных факторов и может меняться. Вот что делать когда такое происходит - вопрос. 10 000 лет это 10 000 оборотов земли вокруг солнца или это 31 557 600 секунд? Не забывайте так же про теорию относительности. Так как предел времени бесконечность, то и предел ошибки его вычисления тоже бесконечность.

Так что не забивайте себе голову, а используйте григореанский календарь.
...
Рейтинг: 0 / 0
24.10.2002, 16:19:33
    #32061637
Miha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
вот бредовая мысль

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

тогда критерий поиска даты X равной дате Y будет:
abs(log(X-A+1) - log(Y-A+1)) < e
где:
X,Y,A - измеряются в кол-ве периодов (допустим, дней или секунд) после единой точки отсчета (скажем, Рождества Христова)

A - текущая дата
e - какая-то фиксированная ошибка
...
Рейтинг: 0 / 0
24.10.2002, 16:22:22
    #32061641
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение дат за любой период
В том то вся и беда, что ошибка не фиксированная, а плавающая и какая она была 100 000 лет назад, одному богу известно.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранение дат за любой период / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]