2015-05-21 2 views
0

Я пытаюсь создать SQL-запрос для выбора записей, где временная метка меньше NOW(), но больше, чем в сентябре прошлого года, но я не хочу указывать год на положить что-то вроде:MySQL получает записи между текущим и месяцем прошлого года

date > '01/09/2014' 

Если бы я был выполнить запрос сегодня он должен дать мне записи из:

сентября 2014 года по май 2015 года (май, как это месяц на момент создания этого вопроса)

Если я запустил его в следующем году, он должен дать мне ответ ords от сентября 2015 года по май 2016 года (май, как это месяц на момент создания этого вопроса)

+0

Если вы знаете, что с какого месяца вы нужны данные почему бы не просто использовать в качестве 'выберите * из таблицы, где date_col между '2014-09-01' и curdate() ' –

+0

я бы это сделал, но это означает, что в следующем году он не будет работать корректно, поскольку он все равно будет получать записи с сентября 2014 года, и он должен быть в сентябре 2015 года и далее , – user2838928

+0

Почему бы не использовать 'intval (date ('Y')) -1)', чтобы определить эту строку? – EdgeCaseBerg

ответ

4

Вы можете построить дату:

where date >= str_to_date(concat(year(now()) - 1, '-09-01'), 
          '%Y-%m-%d') and 
     date < now() 

Я предполагаю, что вы на самом деле хотите немного больше сложный состояние. При выполнении запроса в конце года (скажем, в декабре), вы, вероятно, хотите сентября текущего года:

where date >= str_to_date(concat(year(now()) - (month(now) < 9), '-09-01'), 
          '%Y-%m-%d') and 
     date < now() 
+0

Это прекрасно, именно то, что я искал. большое спасибо – user2838928