Даты до нашей эры в MySQL

espada

Guest
Даты до нашей эры в MySQL

Для исторического сайта возникла необходимость сортировать данные в хронологическом порядке от незапамятных времен. Как это сделать с помощью date, я представляю, но ман сообщает, что она работает корректно только для дат от 1000 года, а даты до н.э. не поддерживает даже теоретически.

Справиться с датами нашей эры можно по идее, форматируя их, как число с десятичной дробью - что-то типа 636.1205 (5 декабря 636 года). Но для дат до н.э. и это не годится. Если изобразить такую дату, как отрицательное число (-636.1205), то дни и месяцы будут сортироваться в обратном порядке.

Подскажите, может, есть какой-нибудь способ вывернуться.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Re: Даты до нашей эры в MySQL

Автор оригинала: espada
Подскажите, может, есть какой-нибудь способ вывернуться.
Есть.
Код:
optimal=# create table testdate (datefield date);
CREATE TABLE
optimal=# insert into testdate values ('2004-02-15');
INSERT 107928 1
optimal=# insert into testdate values ('2004-02-15 BC');
INSERT 107929 1
optimal=# select * from testdate order by datefield asc;
   datefield
---------------
 2004-02-15 BC
 2004-02-15
(2 rows)

optimal=# select version();
                           version
-------------------------------------------------------------
 PostgreSQL 7.4.1 on i686-pc-linux-gnu, compiled by GCC 2.96
(1 row)
 

chira

Новичок
1. использовать varchar поле
2. принять за точку отсчета от рождества Христова не 0000 год, а например 4000 или 6000 и потом корретировать при выводе. если важны совпадения високосных годов, то нужно будет сделать более детальные тесты.
3. сменить базу , как было предложено
 

espada

Guest
Спасибо. С varchar, по-моему, будет то же, что и с числовым, а вот второй вариант, пожалуй, самый реальный.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: chira
2. принять за точку отсчета от рождества Христова не 0000 год, а например 4000 или 6000 и потом корретировать при выводе. если важны совпадения високосных годов, то нужно будет сделать более детальные тесты.
На самом деле 0000 года не было. Был 1 год до н.э., потом 1 год н.э. В этом, кстати, и будет сложность, не говоря уже о том простом факте, что дни недели при сдвиге на 4000 или 6000 лет "поползут"...
 

espada

Guest
Для сортировки сложности не будет. Что с того, что нулевого года нет - все равно первый будет после минус первого.

Вот если высчитывать расстояния между датами - тогда да, но мне это, слава богу, не нужно.
 

HEm

Сетевой бобер
наскольок я помню, есть библиотеки для работы с нестандартными датами, поищи на соурсфорже
 
Сверху