2016-05-18 3 views
0

У меня есть столбец даты в БД MySQL, но даты отформатированы так:MySQL диапазон дат запроса для конкретного формата даты (MMM-YY)

  • Jan-16
  • февраля-16
  • Mar-16

Возможно ли запросить диапазон дат, используя этот формат даты?

Например:

$query = "SELECT `Total` FROM agent WHERE date >= 'Jan-16' AND date < Apr-16"; 

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

+1

если вы в самом начале своего проекта; да, вы должны использовать тип DATE или DATETIME. Это сделает запрос намного проще. –

+0

Вам лучше использовать столбец типа «DATE» или, по крайней мере, такой формат, как «YYYYMM», который сортирует численно и/или лексикографически в том же порядке, что и месяцы. – eggyal

+2

'STR_TO_DATE (date, '% M-% d')' – Akam

ответ

1
  • Jan-16
  • Feb-16
  • Mar-16

Если этот столбец char или varchar или другой тип строки, и вы просто сравнить их к вашему параметру, он не даст то, что вы хотите вызвать это только сравнить их с кодом ASCII персонажа. Вы должны использовать функцию str_to_date для их форматирования, тогда вы можете получить результат в интервале дат.

Как это;)

$query = "SELECT `Total` FROM agent 
WHERE str_to_date(date, '%M-%y') >= str_to_date('Jan-16', '%M-%y') 
AND str_to_date(date, '%M-%y') < str_to_date('Apr-16', '%M-%y'); 

и если ваш параметр дата, просто использовать его. Также вы можете обновить свою колонку до настоящего времени, это будет лучшее решение.

+0

Я обновил свои значения даты до YYYY-MM-DD и тип данных столбца до DATE и внутри консоли phpmyadmin, если я запустил следующий запрос, он возвращает результаты правильно, но если я запускаю тот же запрос из php, что он возвращает данные только для первой даты - любые идеи? $ query = "SELECT' Answered' FROM 'firstname_lastname' WHERE' Date' BETWEEN '2016-01-01' AND '2016-03-01' "; – user3436467

+0

@ user3436467 Вы использовали 'mysql_query' и извлекаете его результат по циклу в PHP? – Blank

+0

Я использую это: '$ result = mysqli_query ($ conn, $ query) или die (mysql_error());' '$ row = mysqli_fetch_array ($ result, MYSQLI_ASSOC);' – user3436467

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