Mysql и функция даты, это обрабатывает это в каждой строке? - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть запрос, который выполняет поиск по дате. Вот предложение WHERE:

WHERE DATE_FORMAT(listing.trackdate,'%Y-%m-%d') >= STR_TO_DATE('$search_sdate','%m/%d/%Y')

Должен ли MySQL обрабатывать date_format и str_to_date для каждой строки, чтобы выполнить предложение where? Или есть более оптимизированный способ сделать это? Поле в таблице является типом даты и времени. Его версия MySQL 5.x. $ search_sdate - это дата, полученная из веб-формы.

Edit: Для уточнения хочу сравнить часть поля даты. Тип поля даты - это datetime, в котором хранится дата плюс время вставки каждой строки. Но для этого конкретного предложения where я просто хочу сравнить часть поля даты. Надеюсь, это прояснит это лучше, извините за путаницу.

Ответы [ 3 ]

1 голос
/ 16 февраля 2011

Если listing.trackdate - это поле DATE, почему необходимо форматирование для сравнения с другой датой?Похоже, вы берете значение даты и превращаете его в строку, чтобы вы могли сравнить его со значением строки, которое вы превратили в дату.

Избыточность в этом подходе должна, я надеюсь,быть очевидным

Что касается первого вопроса, который вы задаете, конечно, DATE_FORMAT(listing.trackdate) должен оцениваться для каждой строки, так как значение в этом поле будет меняться.Но, похоже,

WHERE listing.trackdate >= STR_TO_DATE('$search_sdate','%m/%d/%Y')

должно быть достаточно, если trackdate действительно поле DATE.

0 голосов
/ 16 февраля 2011

Вы задаете правильный вопрос.Чтобы немного обобщить, вам следует избегать операторов SQL, которые включают операции любого типа над полем таблицы любого типа.Он не только добавляет обработку для каждой рассматриваемой записи, но также предотвращает включение оптимизатором любых индексов, включающих это поле.

Если вы хотите получить ответ, включающий диапазон времени (например, дату), используйте "WHERE datetimefield BETWEEN (полночь и полночь) "- или точнее," WHERE datetimefield> = полночь и datetimefield

0 голосов
/ 16 февраля 2011

Не можете ли вы выполнить предложение WHERE без функций форматирования? MySQL не должен должным образом форматировать его для обработки сравнения. Ваше форматирование должно быть сделано только в SELECT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...