2017-01-02 11 views
1
SELECT * FROM `incomes` WHERE incomeDate BETWEEN '28-12-2016' and '31-01-2017' 

Этот запрос не работает, но когда я сделать ниже запроса он показывает результатSQL Между запрос не работает должным образом

SELECT * FROM `incomes` WHERE incomeDate BETWEEN '28-12-2016' and '31-12-2016' 
+1

... Каков тип данных столбца 'incomeDate'? Это объявлено как 'DATE' или' VARCHAR'? Обратите внимание, что строковые литералы в формате dd-mm-yyyy * не * канонические; сравнение строк происходит по символу, слева направо. Таким образом, строковое значение ''29 -07-1999'' будет * между * двумя строковыми литералами, но принятым для представления даты *, даты нет. – spencer7593

ответ

2

Пожалуйста, измените формат даты, поддержка MySQL «ГГГГ-ММ-ДД» Дата формиаты в Comparion , Пожалуйста, используйте ниже запрос.

SELECT * FROM incomes WHERE incomeDate BETWEEN '2016-12-28' and '2017-01-31'. 

Надеюсь, это вам подойдет.

0

Вы сравниваете колонку даты с (двумя) строковыми литералами. То, что происходит здесь, - это дата, которая преобразуется в строку и сравнивает лексикографически. Вместо этого вы должны явно преобразовать строки в даты и, следовательно, сравнить их по дате:

SELECT * 
FROM incomes 
WHERE incomeDate BETWEEN STR_TO_DATE('28-12-2016', '%d-%m-%Y') AND 
          STR_TO_DATE('31-01-2017', '%d-%m-%Y') 
+0

Ну, это всегда лексикографическое сравнение! – Strawberry