2012-04-24 3 views
0

두 테이블에 start_intervalend_interval 두 테이블에 시간을 나타내는 int 값을 저장하는 MySQL 테이블이 있습니다. 나는 그 테이블에서 레코드를 선택하려면이 쿼리를 사용하고 있습니다 :두 값 사이의 SQL 쿼리 내역

SELECT * 
FROM messages 
WHERE 23 BETWEEN start_interval AND end_interval; 

어떻게 start_intervalend_interval보다 클 때 값을받을 수 있나요? 예를 들어 start_interval = 22end_interval = 5 일 경우?

+0

대답 제외하고 귀하의 질문에, 당신은 설정해야합니다 이러한 제약 조건은 결코 발생할 수 없다. – Yuck

+0

질문의 mysql 태그를 고려하면, '제약 조건 확인'은 대부분의 MySQL 사용자가 익숙하지 않은 무언가입니다. 나는 제약 조건이 불량 데이터를 막기 위해 필요하다는 데 동의한다 –

+0

당신의 23은 임의로 나타난다. 넷 차이가 23이거나 넷 차이가 0-23이거나 또는 그 이상이거나 23 시간 이상인 것을 원한다. 당신이 찾으려고하는 목적입니다. – DRapp

답변

2

어쩌면 당신은 두 방향을 확인 :

SELECT * FROM messages 
WHERE 
    (23 BETWEEN start_interval AND end_interval) OR 
    (23 BETWEEN end_interval AND start_interval); 
7

방법에 대해 :

SELECT * FROM messages 
WHERE 23 BETWEEN LEAST(start_interval, end_interval) AND 
       GREATEST(start_interval, end_interval); 
+0

+1 이것은 현명한 해결책입니다 – Alp

+0

안녕하세요, 불행히도이 쿼리는 문제를 해결할 수 없습니다. start_interval = 22 및 end_interval = 5이면 최소값은 5를 반환하고 최대 값은 22를 반환하므로 23은 절대로 5와 22 사이가되지 않습니다. 간격 값은 시간을 나타내므로 22는 10PM이고 5는 5AM입니다. – GodFather

+0

@GodFather : 방법에 대해, start_interval과 if (start_interval> = end_interval, end_interval + 24, end_interval) 사이에 23은 어디입니까? –

0
… 
WHERE 23 BETWEEN start_interval AND end_interval 
    OR start_interval > end_interval AND 
     23 NOT BETWEEN end_interval + 1 AND start_interval - 1 
0

에 대해 어떻게 :

where 23 between start_interval and if(start_interval>=end_interval,end_interval+24,end_interval)? 
+0

그게 내 원래의 생각 이었지만,'22와 5 (+24) 사이에 4와 같은 것이 작동하지 않는다는 것을 깨달았습니다. –