[sql] Вопрос про даты

laki

Есть даты:

31 August 2002
1987
October 1979
April - June 1980
1-5 April 2003
в базе есть два поля
DateFrom
и
DateTo
вот интересует такой вопрос,
как сохранять их что потом элементарными действияеми над датами +-
получать результат в квоте.
чето на ум ниче не приходит.

artimon

Ещё раз, и помедленнее.

laki

смотри
вот есть дата
1989
December 1989
есть таблица
create table SomeT1(
DateFrom timestamp,
DateTo timestamp
);
вот надо придумать как сохранить в нее даты, чтобы
select CASE WHEN (DateFrom - DateTo) some clause1
when (DateFrom - DateTo) some clause2
as `date`
...
получал нормальный результат

xz_post

Если сервак - ms sql смотри тип datetime и функции datediff && dateadd

laki

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

Dasar

Ты уже определился, что должно возвращаться в результате:
'1989' < 'December 1989'?
'1989' > 'December 1989'?
'1989' = 'December 1989'?
'1989' != 'December 1989'?
'1989' - 'December 1989'?
зы
в данном случае, дату можно хранить как:
DateTime + текстовое представление,
DateTime + набор флагов, которые показывают какое какая часть даты была задана,
DateTime + строка форматирования (которая выводит только нужные части даты)

laki

31 August 2002
single date DateTo = 2002-08-31
DateFrom = 2002-08-31
1987
(1)
October 1979
(2)
April - June 1980
(3)
1-5 April 2003
DateTo = 2002-04-5
DateFrom = 2002-04-1
вот интересует как хранить (1,2,3) и как проверть чтобы было универсально

laki


DateTime + текстовое представление,
DateTime + набор флагов, которые показывают какое какая часть даты была задана,
DateTime + строка форматирования (которая выводит только нужные части даты)
и еще хотелось бы обойтись двумя полями.
просто база слишком огромная, каждое поле влияет на размер
база на postgres

Dasar

ты не ответил на мой вопрос, а от него сильно зависит вариант решения.

Dasar

и из треда совсем непонятно, какая у тебя есть проблема.
Что у тебя, конкретно, не получается?

laki

'1989' < 'December 1989'?
'1989' = '01 January' - '31 December 1989'
в твоем варианте
'1989' != 'December 1989'

laki

как посоветуешь хранить две даты?
чтобы например.
2000-01-01 - 2000-01-31
расценивалось в одном случае как 1-31 January 2000,
а в другом January 2000(без чисел)

Dasar

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

laki

на каждую дату по три бита одно поле с длиной в 6ть бит нормальное решение?

Dasar

похоже на правду
но конкретное решение надо уже смотреть на основе баланса:
удобства, скорости, объема в конкретной базе

laki

таблица в которой это требуется около 200 - 300 тысяч записей
Оставить комментарий
Имя или ник:
Комментарий: