Как фильтровать даты в MySQL?

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

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

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

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

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

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

Какие из них будут быстрее, и есть ли какие-нибудь лучшие решения?

php,mysql,datetime,

2

Ответов: 2


7 принят
SELECT   *
WHERE    posted >= '2009-06-01'
         AND posted < '2009-07-01'

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

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

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

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


1

Невзирая на оговорки в отношении этого проекта, стандартный синтаксис будет «МЕЖДУ первыми и последними» или (если вы используете менее гранулярность даты), «отправлено» = «первая дата» и отправлено <last-date + 1 ».

PHP, MySQL, дата и время,
Похожие вопросы