MySQL - Регистрация на основе даты - PullRequest
5 голосов
/ 21 октября 2009

Можно ли объединить две таблицы, основанные на одной и той же дате, без учета времени?

Что-то вроде:

... ОТ назначений осталось присоединиться к продажам на assignments.date = sales.date ...

Единственная проблема - это поле даты и времени, поэтому я хочу убедиться, что оно только смотрит на дату и игнорирует время

Ответы [ 3 ]

9 голосов
/ 21 октября 2009

Вы можете сделать это так:

FROM appointments
LEFT JOIN sales ON DATE(appointments.date) = DATE(sales.date)

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

Возможно, лучше добавить столбец даты в каждую таблицу.

0 голосов
/ 21 октября 2009

Да, но вы должны присоединиться к вычисленному выражению, которое убирает время из значений столбца datetime. Это сделает запрос не SARGable (он не может использовать индекс), поэтому сгенерирует сканирование таблицы ...

Я не знаю синтаксиса в mysql для удаления времени из значения даты и времени, но что бы это ни было, просто напишите

   FROM appointments a 
      LEFT JOIN sales s 
         ON StripTime(s.date) = StripTime(a.date)
0 голосов
/ 21 октября 2009

Предложение ON принимает произвольное условное выражение, так что вы можете выполнить нормализацию даты в обе стороны перед сравнением, но это должно представлять значительное снижение производительности.

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