У меня есть таблица с столбцом с именем 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
– и это приведет к плохим результатам.