MySQL сравнивает строку DATE со строкой из поля DATETIME
У меня есть вопрос: можно ли выбрать из базы данных MySQL, сравнивая одну строку DATE "2010-04-29" со строками, которые хранятся как DATETIME (2010-04-29 10:00)?
У меня есть один выбор даты, который фильтрует данные, и я хотел бы запросить таблицу по полю DATETIME следующим образом:
SELECT * FROM `calendar` WHERE startTime = '2010-04-29'"
... и я хотел бы получить строку с DATETIME значением "2010-04-29 10:00".
Любые предложения? Спасибо.
Ответы
Ответ 1
Используйте следующее:
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
Только для справки У меня есть таблица записей за 2 миллиона, я выполнил аналогичный запрос.
Ответы Salils заняли 4,48 секунды, выше - 2,25 секунды.
Итак, если таблица BIG, я бы предложил это скорее.
Ответ 2
Если вы хотите выбрать все строки, в которых DATE-часть столбца DATETIME соответствует определенному литералу, вы не можете сделать это так:
WHERE startTime = '2010-04-29'
потому что MySQL не может напрямую сравнивать DATE и DATETIME. Что делает MySQL, он расширяет данный литерал DATE со временем '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 + epsilon. В общем, я предлагаю использовать второй вариант.
Оба варианта могут использовать индекс в startTime, который станет важным, когда таблица будет расти.
Ответ 3
SELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"
ИЛИ
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
Ответ 4
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29';
это помогает, вы можете преобразовать значения как DATE
перед сравнением.
Ответ 5
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)
.
Ответ 6
SELECT * FROM `calendar` WHERE startTime like '2010-04-29%'
Вы также можете использовать операторы сравнения в датах MySQL, если хотите найти что-то после или раньше. Это потому, что они написаны таким образом (наибольшее значение до наименьшего с ведущими нулями), что простая сортировка строк будет сортировать их правильно.