2013-01-24 3 views
3

У меня есть быстрый вопрос о выборе dateranges в MySQL, отформатированный как этот YYYY-MM-DDВыберите диапазон дат (месяц/год) в базе данных

Я прочитал MySQL select date range issue и понять основы использования этого, но как я могу «включить например, 29 февраля? Я хотел бы избежать обходного пути PHP, есть ли что-нибудь подобное в MySQL?

Я не совсем понимаю http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

может кто-нибудь дать мне пример, как выбрать последние годы данные с февраля?

+0

, пожалуйста, сообщите нам некоторые данные и желаемый результат. –

ответ

7

момент, когда вы указать месяц, MYSQL двигатель достаточно умен, чтобы получить правильное количество дней в течение месяца (будь то високосный год или нет) и соответственно оценивайте свои поля даты.

Для получения данных между двумя датами вашего выбора: (с использованием interval -1 year, чтобы получить один год назад с сегодняшнего дня)

SELECT * FROM yourtable 
WHERE yourdate BETWEEN DATE_ADD(Now(), Interval -1 YEAR) 
AND Now() 
AND MONTH(yourdate) = 2 -- to get data for Month of February 
; 

Или вы можете просто просто написать с функцией YEAR без BETWEEN

SELECT * FROM yourtable 
WHERE YEAR(yourdate) = YEAR(Now()) - 1 
AND MONTH(yourdate) = 2 -- to get data for Month of February 
; 

Для вопроса о Str_to_Date функция используется для преобразования строки, содержащей дату в тип даты с желаемым форматом, и это инверсия функции DATE_FORMAT.

SELECT STR_TO_DATE('12-Apr-2012', '%d-%M-%Y') 
FROM DUAL 
; 

Обратите внимание, в приведенном выше демо, что вы должны указать день, месяц, год договоренность в формате, который вы добавляете в функции STR_TO_DATE.

PS: это довольно расплывчато, что вы действительно tryhing достичь здесь, без sameple данных и ожидаемым reslts показано на вопрос .. :)

+0

@PrimusS действительно просматривает информацию и образцы, приведенные здесь, а затем прокомментируйте, пожалуйста, если вам нужна дополнительная помощь. Но на самом деле, если вы можете показать некоторые собственные собственные данные, это замечательно =) – bonCodigo

+1

Вы можете добавить, что если вы хотите, чтобы индекс в 'yourdate' использовался эффективно по запросу, он должен быть записан как' WHERE yourdate> = '2012-02-01' AND yourdate <'2012-03-01'' (без функций, примененных в столбце 'yourdate') –

+0

+1 @ypercube, который добавляет до производительности и резко специфичен для' date range' :) – bonCodigo

2

Ниже запрос даст вам данные прошлого года февраль месяц

SELECT * FROM `your_table_name` WHERE YEAR(`your_date_field_name`) = YEAR(CURRENT_DATE()) AND MONTH(`your_date_field_name`) = 2 
Смежные вопросы