2013-08-31 4 views
0

에서 DATERANGE 데이터를 선택이 내 테이블 : 나는 2013-8 및 2018-9에서 행을 선택 마녀를 원하는MySQL은 두 개의 열

id | month | year | name 
1 | 9  | 2013 | dddd 
2 | 2  | 2017 | eeee 

ut_period. 그래서이 쿼리를 작성했지만 성공하지 못했습니다 :

SELECT * 
FROM `ut_period` p 
WHERE `p`.`status` = 4 
    AND `p`.`year` >= '2013' 
    AND `p`.`mont` >= '8' 
    AND `p`.`year` <= '2018' 
    AND `p`.`month` <= '9' 

어떻게해야합니까?

+0

왜 아래쪽 투표 이유는 무엇입니까? –

+0

** 열과 테이블 이름을 인용/역 따옴표로 사용하지 마십시오. ** 시각적 인 혼란 만 가중 시키며 구문 오류를 만들 수있는 또 하나의 방법입니다. 필요로하는 유일한 이유는 예약어 인 열 이름이 있고 예약어 인 열 이름을 사용하는 것이 끔찍한 생각이기 때문에 한 번에 피할 수있는 두 가지 나쁜 습관입니다. –

답변

1

나는 "세 달"을 처리 할 수있는 쉬운 방법을 찾을 수는 곱셈입니다 - 기본적으로, 어떤 일 이후 개월 수 : 당신이 좋아하는 경우

select p.* 
from ut_period p 
where (p.year * 12 + p.month) between 2013*12 + 8 and 2018*12 + 9; 

, 당신은 또한의 숫자 이러한 변환 할 수 있습니다 YYYYMM 형식을 사용하면 범위에 대한 상수 값을 쉽게 입력 할 수 있습니다.

select p.* 
from ut_period p 
where (p.year * 100 + p.month) between 201308 and 201809; 
0

가 월 및 연도

(Documentation here) 또한

BETWEEN 절을 사용하여, 당신이 정말로 하나의 열에 일, 월, 연도를 넣어한다고 - MySQL의가있다 이유는 날짜 관련 필드 유형. day, month 및 year를 DATE 필드 유형이있는 단일 열로 대체하면 날짜를 훨씬 쉽게 비교할 수 있습니다.