Подтвердить что ты не робот

Как хранить (и сортировать) неопределенные диапазоны дат?

У меня есть база данных, которая должна хранить диапазоны года (например, продолжительность жизни), которые в некоторых случаях не очень специфичны. Например, как и обычный "1960", мы имеем "c. 1960 'для" около 1960 года "и 1960-е годы в течение десятилетия 1960 года, а также" nd" без даты, которая явно отличается от NULL, которая будет до настоящего времени.

Каким будет лучший способ их хранения?

Я подумывал о том, чтобы, возможно, сохранить год как строку и добавить 's' в течение десятилетий и 'c' для около, с 'nd' для даты нет... но это кажется просто неправильным. Кроме того, при сортировке в хронологическом порядке мне нужно сортировать, вставляя элементы 1960-х годов до c. 1960, которые, в свою очередь, относятся к периоду до 1960 года.

Как это сделать правильно?

Некоторые примерные диапазоны дат:

1957
с. 1957
с. 1957 - 1965
с. 1957 - 1960-е годы
с. 1957 г. - настоящее время
с. 1957 - nd

Спасибо за вашу помощь!

4b9b3361

Ответ 1

Вы можете вставить самую раннюю и самую последнюю дату для диапазона.

Например, точная дата будет

Jan 1, 1960   Jan 1, 1960

c. 1960 будет

Jan 1, 1960   Dec 31, 1960

1960-е годы будут

Jan 1, 1960   Dec 31, 1969

и др.

Затем вы можете заказать первую дату и дату:

SELECT  *
FROM    mytable
ORDER BY
        start_date, DATEDIFF(end_date, start_date) DESC

В качестве альтернативы вы можете сохранить ожидаемое значение и отклонение вместо дат начала и окончания.

Ответ 2

Это звучит как проблема типа "нечеткой логики". Я бы занялся этим, используя несколько столбцов:

  • Самое раннее Возможная дата
  • Самое раннее Определенная дата
  • Последняя определенная дата
  • Последняя возможная дата

Ваши примеры могут быть представлены как

  • 1957,1957,1957,1957
  • 1955,1957,1957,1959
  • 1955,1959,1965,1965
  • 1955,1959,1960,1969
  • 1955,1959, NULL, NULL
  • 1955,1959,9999,9999

Я предполагаю, что "c" означает +/- 2 года, десятилетие работает от "0 до" 9, а 9999 - значение флага для "nd"

Любое использование?

Ответ 3

Я думаю, что ответ Quassnoi хорош, альтернативно вы можете генерировать измерение времени, затем ссылаться на него в виде симуляции (хотя ваше измерение может не совпадать нужно столько строк)?

Ответ 4

Вам нужно предопределить, какая ваша структура является OR или допускать переменность. Цирка часто ассоциируется с классификацией артефактов (книг, фотографий, писаний) и других объектов (неизвестные точные даты рождения/смерти), где можно найти широкую разновидность. Имейте в виду, что реклассификация артефактов часто происходит по мере получения дополнительной информации. Таким образом, что Макс определил работы, но я бы также добавил определенную дату классификации и, возможно, столбец с описанием и/или именем классификатора/сущности, определяющих классификацию. Вы можете определить, нужны ли вам исторические записи о реклассификации и как их обрабатывать.

Еще один пункт примечания относительно таких вещей - какой календарь был установлен, определяя фактическую дату дня, например, дату 4 октября (Джулиан), следовала дата 15 октября (григорианская), которая была изменением сделанное в 1582 году и аналогичное изменение в 1751 году, которое изменило британский и его колоний в григорианский календарь. Таким образом, вам нужно определить используемый календарь, который можно перевести на календари текущего дня.

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

Кроме того, некоторые события связаны с месяцами, обозначенными как "первый месяц, второй месяц и т.д." которые, возможно, путают, как, например, квакеры меняются, где "первый месяц" в 1751 году был в марте, но в 1752 году он был январем - особенно отмечен, когда генеалогия является предметом (как вы подразумеваете), а рождаемость/смерть - это события.

Для удовольствия, бросьте в Цезер и Календари (первый день марта) и его реформу високосного года/дня, когда 24 февраля был високосный день как "второй шестой день, предшествующий Календари", так что было два 24 февраля (два 6-й день) в високосные годы.

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

Итак, используйте такую ​​структуру, как Max и/или Quassnoi, но, возможно, немного больше для деления.

Цитата для календарей и понимания: Что такое календарь

Ответ 5

"Как хранить (и сортировать) неопределенные диапазоны дат?"

(A) Проанализируйте с более высоким уровнем проверки, что значит быть диапазоном дат. Это означает, что есть точная дата начала и точная дата окончания диапазона.

(B) Пусть анализируется с более высоким уровнем проверки, что это может означать "undefined" диапазон дат. Для меня кажется, что это какой-то диапазон дат, в котором либо дата начала, либо дата окончания, либо и то, и другое не точно известны, но в которых один (или оба) из них представляют собой диапазон.

(C) Известно, что обычное математическое понятие "упорядочения" (так называемый "общий порядок" ) нецелесообразно относится к понятию "диапазоны" (как бы вы решили, что 1-3 либо больше или меньше 0-6?). Теоретически можно определить такой порядок, на основе, например, "порядок по датам начала сначала и в равные даты начала, в конце даты", но такой порядок никогда не бывает полезен.

(D) И если "дата начала" и/или "дата окончания" диапазона сами являются "неопределенными" (т.е. эти компоненты сами являются диапазонами), тогда очевидно, почему безумно пытаться и осмысленно упорядочить такие диапазоны.

Итак, ответ на часть "(и сортировка)": "У вас нет, потому что вы не можете (значимым образом)".