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

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

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

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

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

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

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

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

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

ИМХО Крис (с соавторами) хорош, но морально устаревает не по дням, а по часам. Одни только использования идентификаторов навроде DEPT# чего стоят...
...
Рейтинг: 0 / 0
Хранение дат за любой период
    #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
Хранение дат за любой период
    #32061438
ALK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALK
Гость
если речь идет об периодах соразмерных с историей человечества то за ноль можно принять и начало нашей эры :

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

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

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

интересно на какой период хватит bigint ...
...
Рейтинг: 0 / 0
Хранение дат за любой период
    #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
Хранение дат за любой период
    #32061450
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется:
1. Понятие [дата] должно быть расширено, т.к. существуют события, для которых такая временная длительность неприменима. Например, [дата рождения планеты Земля].
2. Отказаться от абсолютных значений дат. Дата имеет смысл только для выбранного способа интерпретации - тип календаря, и т.д.
3. получается не набор полей а некая структура таблиц.

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

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

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

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

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

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

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

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


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