SQL-запрос не выполняется на основе условия BETWEEN
У меня есть следующий запрос SQL:
SELECT Count(*)
FROM MyDB.mytable
WHERE date_dt BETWEEN '2013-12-09 00:00:00' AND '2013-12-09 23:59:59'
;
Когда я запускаю вышеупомянутый запрос, я получаю количество записей результатов, представленных в таблице. По какой-то причине это игнорирует BETWEEN
состояние я включил. В конце концов, я должен использовать DELETE
вместо SELECT
и я буду делать что-то вроде следующего:
DELETE FROM MyDB.mytable
WHERE date_dt BETWEEN '2013-12-09 00:00:00' AND '2014-12-09 23:59:59'
;
Если бы я использовал DELETE
Я бы случайно удалил все записи из моей таблицы. Пожалуйста, дайте мне знать, что я делаю не так.
2 ответа
Похоже, вы пытаетесь получить записи за один день (2014-12-09), но ваш код говорит за последние 366 дней. Может быть, я не прав, но похоже, что вы хотели:
DELETE FROM MyDB.mytable
WHERE date_dt BETWEEN '2014-12-09 00:00:00' AND '2014-12-09 23:59:59'
;
В противном случае я не вижу ничего плохого в вашем запросе.
Документация MySQL гласит:
"Для достижения наилучших результатов при использовании BETWEEN со значениями даты или времени используйте CAST() для явного преобразования значений в требуемый тип данных. Примеры: если вы сравниваете DATETIME с двумя значениями DATE, преобразуйте значения DATE в значения DATETIME. используйте строковую константу, такую как '2001-1-1' в сравнении с DATE, приведите строку к DATE."
Стоит попробовать.
SELECT Count(*)
FROM MyDB.mytable
WHERE date_dt BETWEEN CAST('2013-12-09 00:00:00' AS DATETIME)
AND CAST('2014-12-09 23:59:59' AS DATETIME);