Как я должен фильтровать даты в MySQL? - PullRequest
2 голосов
/ 16 июня 2009

Я создаю набор «архивных» страниц с указанием года и месяца. В моей таблице есть поле datetime с именем posted. Я хочу выбрать все строки в конкретном месяце.

Я думал о двух решениях:

(1) Использовать сопоставление строк:

SELECT ... WHERE posted LIKE '2009-06%'

(2) Используйте некоторые функции извлечения MySQL:

SELECT ... WHERE YEAR(posted)=2009 AND MONTH(posted)=6

Что из этого будет быстрее, и есть ли лучшие решения?

Ответы [ 2 ]

7 голосов
/ 16 июня 2009
SELECT   *
WHERE    posted >= '2009-06-01'
         AND posted < '2009-07-01'

Этот будет эффективно использовать индекс для posted, в отличие от обоих ваших запросов.

Обратите внимание, что если вы сохраняете posted как VARCHAR, то следующий запрос:

SELECT ... WHERE posted LIKE '2009-06%'

тоже будет использовать индекс.

1 голос
/ 16 июня 2009

Независимо от оговорок в отношении этого дизайна, стандартный синтаксис будет «между первой датой и последней датой» или (если вы используете детализацию меньше даты), «отправлено» = первая дата И отправлено <последняя- дата + 1 ". </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...