2017-01-02 2 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

날짜 형식을 변경하십시오, comparion에서 MYSQL 지원 'YYYY-MM-DD'날짜 포름 산염 . 아래 쿼리를 사용하십시오.

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

희망이 도움이 될 것입니다.

0

날짜 열과 (2) 문자열 리터럴을 비교하고 있습니다. 여기서 일어나는 일은 날짜가 문자열로 변환되어 사전 식으로 비교된다는 것입니다. 대신 문자열을 날짜로 명시 적으로 변환하여 날짜 순서에 따라 비교해야합니다.

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

관련 문제