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);
Другие вопросы по тегам