2012-12-24 2 views
2

MySQL은 : 확인 날짜 범위

id | startDay | startMonth | startYear | endDay | endMonth | endYear  
1 | 22  | 12   | 2012  | 25  | 1  | 2013 

지금 우리의 startDate, startMonth와, startYear 즉 (25)와 같은 다른 날짜 범위를 가지고있는 것처럼 우리는 테이블 구조가 | 12 | endYear 2012 및 endDay 또는, endMonth와를, 즉 10 | 1 | 2013.

제공된 날짜 범위가 테이블에있는 테이블에서 레코드를 가져 오도록 쿼리를 원합니다. 이 경우에는 먼저 레코드를 의미합니다.
이 질문을 작성하는 방법은 무엇입니까?

+1

은 왜 시작과 끝 날짜 날짜 필드에 대한'date' 유형을 사용하지? 이것은이 타입이 의미하는 것입니다 - mysql에서 날짜를 다루는 것. – Nemoden

+0

@Nemoden 실제로이 테이블 구조는 이미 설계되었으므로 지금 구조를 변경할 수 없습니다. – user1852812

답변

3

, MarcB's advice @ 걸릴. 그러나 테이블을 변경할 시간이 없으면 다음 쿼리를 사용할 수도 있습니다.

SELECT * 
FROM tableName 
WHERE ('2012-12-25' BETWEEN DATE(CONCAT_WS('-', startYear, startMonth, startDay)) AND 
        DATE(CONCAT_WS('-', endYear, endMonth, endDay))) AND 
     ('2013-01-10' BETWEEN DATE(CONCAT_WS('-', startYear, startMonth, startDay)) AND 
        DATE(CONCAT_WS('-', endYear, endMonth, endDay))) 
4

도랑이 구조 및 사용 기본 날짜 필드 :

id start_date end_date 
1 2012-12-22 2013-1-25 

는 당신은 예를 들어, 기본 MySQL의 날짜/시간 함수와 비교를 사용할 수 있습니다 대신 제대로 같은 조각 값을 비교 무시 무시하게 추악한 멀티 레벨 비교를 사용하지의

SELECT id WHERE yourdate BETWEEN start_date AND end_date 

는 :

먼저
SELECT id where YEAR(yourdate) < startYear OR (YEAR(yourdate) > startYear AND MONTH(yourdate) < startMOnth) etc... etc....etc.. 
+0

지금 우리는 이미 설계된 구조를 변경할 수 없습니다. – user1852812

+0

startDate와 endDate 사이의 날짜가 아닌 범위를 확인하고 싶습니다. 제공된 startDate 및 endDate가 startDate 및 endDate 테이블에 있는지 확인하고 싶습니다. 이것을 확인하는 방법 – user1852812