MySQL: запрос строк, связанных со временем, сгруппированных по веку? - PullRequest
1 голос
/ 08 февраля 2011

Я работаю над проектом, в котором одна таблица базы данных выглядит следующим образом (структурно, но не с данными - puuh):

year    |  event                               |    category
------------------------------------------------------------
1970    |  Someone ate a cheeseburger          |   food
2010    |  Justin bieber was discovered        |   other
1500    |  Columbus makes 3rd trip to America  |   notable
------------------------------------------------------------

Как бы я запросил эту таблицу, чтобы мой результат был сгруппирован впуть за столетие?

2000-век:
2010 - Джастин Бибер был обнаружен

1900-й век:
1970 - Кто-то ел чизбургер

1500-век:
1500 - Колумб совершает 3-ю поездку в Америку

Извините за сырные псевдодаты:)

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

MySQL не имеет функции столетия, но у него есть год, поэтому вы в основном делаете:

SELECT whatever
FROM yourtable
WHERE ...
GROUP BY CAST((Year(datetimefield) / 100) AS INTEGER)

Конечно, это не принимает во внимание, что столетия официально начинаются с их года "1", а не с года "0" (например, 1900 год - это еще 18-й век, а не 19-й). Но если вы не приверженец точности, простой метод «делить на 100» является самым быстрым / простым.

1 голос
/ 08 февраля 2011
SELECT CAST((Year(datetimefield) / 100) AS INTEGER) as century, someotherfields
FROM yourtable
WHERE ...
ORDER BY datetimefield

Это лучший подход к вопросу, я думаю.

(псевдокод заимствован у Марка B)

...