MCardinale, у вас уже есть ответ, но я хотел дать еще один совет.
Будьте уверены, что вы хотите сделать это таким образом. Функции для строк в инструкциях SELECT никогда не масштабируются очень хорошо, так как таблицы базы данных становятся больше (не только в принятом ответе, я имею в виду любая функция на строку). Это потому, что они, как правило, нарушают способность СУБД выбирать правильный план выполнения для максимальной скорости.
Если вы хотите, чтобы решение хорошо масштабировалось, вам нужно хранить информацию в БД таким образом, чтобы скорость извлечения была невероятно высокой (исходя из принципа, некоторые скажут, что правда - строки таблицы почти всегда читаются далеко чаще, чем написано).
Для этого работоспособным решением часто является добавление нового столбца целиком, который просто содержит часть даты данного столбца даты и времени, и использование триггеров вставки / обновления для обеспечения его правильной установки.
Затем, имея индекс для этого нового столбца, можно выполнять запросы по дате каждой строки, не беспокоясь о производительности функций для каждой строки.
Влияние триггера на производительность не должно иметь значения, поскольку вставки и обновления происходят гораздо реже, чем выбор. Это решение заключается в том, чтобы переложить стоимость преобразования даты-времени в даты вместо вставки / обновления, а не выбора, что значительно сокращает совокупную стоимость.
Это становится очевидным в таблице базы данных, которая никогда не изменяется после настройки - затраты в вашей текущей ситуации (излишне) происходят каждый раз, когда вы читаете данные. В ситуации, описанной в этом ответе, стоимость полностью исчезает.
Конечно, для таблицы потребуется больше места на диске, но я редко видел место на диске в качестве узкого места в СУБД - это почти всегда грубая нагрузка на процессор.
Теперь я понимаю, что это может сломать 3NF (так как этот новый столбец может не зависеть от ключа), но часто это полезно для производительности. Общее правило, которому я следую, заключается в реализации в 3NF и переходе к другим нормализованным формам, если производительность становится проблемой.
Просто пища для размышлений - наслаждайтесь.
Post Scriptum: Если вы действительно храните дату и время в своем поле, вам, вероятно, следует избегать его вызова MyDate
. Если это действительно дата, тип столбца неправильный (и мой совет здесь становится спорным). В противном случае его следует переименовать во что-то более наглядное. Администраторы и читатели кода, которые следуют за вами, будут вечно благодарны: -)