2016-06-15 2 views
-1

Что я делаю здесь, это выборка данных из таблицы mysql в течение недели с сегодняшнего дня. Моя единственная Наша задача в том, что даты хранятся в VARCHAR формате DM д Y.Выберите диапазон дат mysql, основанный на VARCHAR Дата

Моя таблица хранится Date пример: Ср июл 03 2016

Мой код:

$result = mysqli_query($con," SELECT * FROM `BIMTECH_academy_2016_classes` WHERE STR_TO_DATE(Date, '%D %M %d %Y') > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY Date,From DESC; "); 
    while($row = mysqli_fetch_array($result)) 
    { 
      echo $row['ClassNumber']; 
      echo $row['CourseName']; 
      echo $row['Date']; 
      echo $row['From']; 
      echo $row['To']; 
    } 

My Current Table

+0

http://stackoverflow.com/questions/3296725/parse-date-in-mysql –

+0

Что случилось с вашим текущим кодом? Что означает 'SELECT STR_TO_DATE (дата,% D% M% d% Y) FROM BIMTECH_academy_2016_classes' show? (Не можете ли вы просто исправить тип столбца базы данных?) –

+0

Вы можете попробовать использовать функцию ** ** ** [date_format] (MySQL) ** для форматирования ваших дат. –

ответ

0

Это ... хорошо, немного грустно. Даты должны храниться в качестве правильного типа данных, поскольку вы можете запрашивать данные без чрезмерных затрат. Если есть какой-либо шанс, пожалуйста, преобразуйте эти даты в действительный формат даты и измените тип столбца на date или datetime.

В то же время вы можете использовать функцию MySQL, но поскольку она будет использоваться в части запроса WHERE, тогда MySQL всегда будет проверять всю таблицу, а затем внутренне преобразовывать все строки в даты и только затем сравнивать с что вам нужно. Если в таблице хранится много данных, это может быть очень медленным. Индексирование столбца тоже не поможет, так как MySQL все равно должен извлекать и преобразовывать все столбцы, прежде чем он сможет выполнить сравнение.

+1

Точно. По крайней мере, используйте 'DATE' и' TIME' https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html ... Я имею в виду даже не делать этого , но хотя бы. – Drew

0

пример: просто relace @date с именем вашего столбца, и вы должны вернуть дату в нужном вам формате.

SET @date = "Sun Jul 10 2016"; 
SELECT DATE_FORMAT(STR_TO_DATE(@date,"%a %b %d %Y"),"%Y-%m-%d") as formatted_date 

больше деталей: DATE_FORMAT, STR_TO_DATE

Смежные вопросы