Подтвердить что ты не робот

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".

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

4b9b3361

Ответ 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, если хотите найти что-то после или раньше. Это потому, что они написаны таким образом (наибольшее значение до наименьшего с ведущими нулями), что простая сортировка строк будет сортировать их правильно.