MySQL между датами, которые охватывают несколько лет - PullRequest
0 голосов
/ 21 марта 2011

Привет, мне было интересно, почему этот оператор работает в mySQL

SELECT COUNT(*) AS `numrows` 
FROM (`myTable`) 
WHERE DATE_FORMAT(creationDateTime, '%m/%d/%Y') BETWEEN '02/21/2011' AND '03/20/2011'

но это не

SELECT COUNT(*) AS `numrows` 
FROM (`myTable`) 
WHERE DATE_FORMAT(creationDateTime, '%m/%d/%Y') BETWEEN '12/21/2010' AND '03/20/2011'

Первый оператор возвращает счетчик «xx» числа строк, а второй - «0»

Единственное отличие, которое я вижу, состоит в том, что дата «от» - в 2010 году, а дата «конца» - в 2011 году. Чтобы проверить, была ли это проблема, которую я запрашивал в «31.12.2010», она все же дала мне 0 результатов, но когда я установил дату начала как «01/01/2011», это дало мне количество записей, которые были созданы за этот промежуток времени.

Есть ли что-то, чего мне не хватает в отношении mySQL между и использованием дат разных лет?

Спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 21 марта 2011

Попробуйте использовать формат даты BETWEEN '2010-12-21' AND '2011-03-20'. Также удалите функцию DATE_FORMAT ().

Итак, это:

SELECT COUNT(*) AS `numrows` 
FROM `myTable` 
WHERE creationDateTime BETWEEN '2010-12-21' AND '2011-03-20'
1 голос
/ 21 марта 2011

DATE_FORMAT () возвращает строку, а не дату.Используя его, вы заставляете сравнение строк вместо сравнения дат.Вы должны опустить DATE_FORMAT и использовать вместо этого строки даты YYYY-MM-DD.

...