выберите данные по данным sql по дате

У меня есть таблица с столбцом с именем date , как varchar. Содержимое специально отформатировано, как «11 марта 2011 года».

Как я могу выбрать результаты, которые они правильно упорядочили по дате?

Я слепо предполагаю MySQL здесь, потому что это имеет смысл в контексте этого вопроса. Никто, использующий другой механизм базы данных, не посмеет создать эту проблему в первую очередь.

STR_TO_DATE на помощь! Учитывая формат «01 марта 2000 года», следующее преобразование должно работать.

 SELECT STR_TO_DATE(column_name, '%M %d, %Y') FROM TableName WHERE ... ORDER BY STR_TO_DATE(column_name, '%M %d, %Y') 

Возможно, вам придется немного изменить строку формата .

Да, вы можете использовать функцию DATE вместе с CURDATE .

 SELECT * FROM tbl WHERE DATE(your_date_column) = CURDATE() 

Это выберет все строки, где your_date_column – сегодняшняя дата.

Если вы хотите выбрать все строки, где your_date_column находится между двумя датами, вы можете просто использовать BETWEEN :

 SELET * FROM tbl WHERE your_date_column BETWEEN '20111-03-20' AND '2011-03-30' 

Если ваши две даты имеют такие переменные, как $date_begin и $date_end , вы можете использовать SQL-запрос, например следующий, чтобы получить данные, находящиеся между этими датами:

 select * from your_table where date between '$date_begin' and '$date_end' 

(Не уверен, что я вполне понимаю вопрос)
Если вы хотите получить строки, соответствующие текущей дате, вам понадобятся переменные:

  • $current ; это будет похоже на 2011-03-20 – это означает 2011-03-20 00:00:00
  • $next ; это будет похоже на 2011-03-21 – это означает 2011-03-21 00:00:00

И вы будете использовать такой запрос, как этот:

 select * from your_table where date >= '$current' and date < '$next' 

Выбрать данные, у которых есть дата, которая больше или равна сегодняшним; и это до завтра.

В любом случае, попробуйте не применять функцию SQL в столбце даты; не делайте ничего подобного:

 where some_function(date) >= ... 

При этом ваш механизм базы данных должен будет применить эту функцию ко всем строкам вашей таблицы, а не использовать какой-либо индекс, который может иметься в столбце date – и это приведет к плохим результатам.