У меня вопрос: можно ли сделать выбор из базы данных 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".
Какие-либо предложения? Спасибо.
mysql
datetime
comparison
Мэнни Калавера
источник
источник
startTime
он проиндексирован.Если вы хотите выбрать все строки, в которых часть DATE столбца DATETIME соответствует определенному литералу, вы не можете сделать это так:
потому что MySQL не может напрямую сравнивать DATE и DATETIME. Что делает MySQL, он расширяет заданный литерал DATE временем '00: 00: 00 '. Итак, ваше состояние становится
Уж точно не то, что вы хотите!
Условие - это диапазон, поэтому его следует задавать как диапазон. Есть несколько возможностей:
Существует крошечная вероятность того, что первый ошибается - когда ваш столбец DATETIME использует субсекундное разрешение и назначена встреча в 23:59:59 + эпсилон. В общем, предлагаю использовать второй вариант.
Оба варианта могут использовать индекс startTime, который станет важным при росте таблицы.
источник
date()
,year()
,datediff()
или любой аналогичный)00:00:00
. теперь мои результаты имеют смыслSELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"
ИЛИ
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
источник
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 DATE(startTime) = '2010-04-29';
это помогает, вы можете преобразовать значения, как
DATE
перед сравнением.источник
Вы можете преобразовать поле DATETIME в DATE как:
SELECT * FROM `calendar` WHERE CAST(startTime AS DATE) = '2010-04-29'
Это очень эффективно.
источник
startTime
он проиндексированSELECT * FROM `calendar` WHERE startTime like '2010-04-29%'
Вы также можете использовать операторы сравнения с датами MySQL, если хотите найти что-то после или до. Это потому, что они написаны таким образом (от наибольшего значения к наименьшему с ведущими нулями), что простая сортировка строк будет правильно их сортировать.
источник