MySQL сравнивает строку даты со строкой из поля DATETIME


У меня есть вопрос: Можно ли выбрать из базы данных MySQL, сравнивая одну строку даты "2010-04-29" со строками, которые хранятся как DATETIME (2010-04-29 10:00)?

У меня есть один выбор даты, который фильтрует данные, и я хотел бы запросить таблицу по полю DATETIME следующим образом:

SELECT * FROM `calendar` WHERE startTime = '2010-04-29'"

...и я хотел бы получить строку, которая имеет значение DATETIME "2010-04-29 10:00".

какие предложения? Спасибо.

6 69

6 ответов:

использовать следующий:

SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'

просто для справки у меня есть таблица записей 2 миллиона, я запустил аналогичный запрос. Ответ Салиса занял 4,48 секунды, выше-2,25 секунды.

поэтому, если таблица большая, я бы предложил это скорее.

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

WHERE startTime = '2010-04-29'

потому что MySQL не может напрямую сравнивать дату и время. Что делает MySQL, он расширяет данный литерал даты с временем '00:00: 00'. Так что ваше состояние становится

WHERE startTime = '2010-04-29 00:00:00'

конечно, не то, что вы хотите!

условие является диапазоном и, следовательно, оно должно быть задано как диапазон. Есть несколько возможности:

WHERE startTime BETWEEN '2010-04-29 00:00:00' AND '2010-04-29 23:59:59'
WHERE startTime >= '2010-04-29' AND startTime < ('2010-04-29' + INTERVAL 1 DAY)

есть крошечная возможность для первого будет не так - когда ваш столбец datetime использует точностью до доли секунды и есть назначение в 23:59:59 + Эпсилон. В общем предлагаю использовать второй вариант.

оба варианта могут использовать индекс на startTime, который станет важным, когда таблица растет.

SELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"

или

SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29';

это помогает, вы можете конвертировать значения как DATE прежде чем сравнивать.

SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT('2014-11-24 10:48:09','%Y-%m-%d %H:%i:%s')

это для формата datetime в mysql с помощью DATE_FORMAT(date,format).

SELECT * FROM `calendar` WHERE startTime like '2010-04-29%'

вы также можете использовать операторы сравнения на датах MySQL, если вы хотите найти что-то после или до. Это связано с тем, что они написаны таким образом (от наибольшего значения до наименьшего с ведущими нулями), что простая сортировка строк будет правильно сортировать их.