8 ответов:
SELECT * FROM table WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
для тех, кто не хочет использовать
DATE_SUBиспользуйтеCURRENT_DATE:SELECT CURRENT_DATE - INTERVAL 30 DAY
давайте не будем использовать
NOW()поскольку вы теряете кэширование или оптимизацию запросов, потому что запрос каждый раз отличается. Просмотреть список функций, которые вы не должны использовать в документация MySQL.в приведенном ниже коде предположим, что эта таблица растет со временем. Добавлен новый материал и вы хотите показать только вещи за последние 30 дней. Это самый распространенный случай.
обратите внимание, что дата была добавлена в виде строки. Лучше добавить дату таким образом, из вашего кода вызова, чем использовать
NOW()функция, как это убивает кэширование.SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);можно использовать
BETWEENЕсли вы действительно просто хотите вещи с этой самой секунды до 30 дней до этой самой секунды, но это не общий случай использования в моем опыте, поэтому я надеюсь, что упрощенный запрос может служить вам хорошо.
MySQL вычитает дни отныне:
select now(), now() - interval 1 dayпринты:
2014-10-08 09:00:56 2014-10-07 09:00:56
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')вы можете форматировать с помощью формата даты в SQL.
Если вам нужна только дата, а не время использования:
select*from table where exec_datetime between subdate(curdate(), 30)and curdate();С
curdate()опускает компонент времени, это потенциально быстрееnow()и более "семантически правильно" в тех случаях, когда вас интересует только дата.и
subdate()2-арность перегрузки потенциально быстрее, чем с помощьюinterval.intervalпредназначен для случаев, когда вам нужна не компонента.
Comments