날짜 등록전 쿼리를 날려야 하는데 질문입니다. 0 2 1,949

by 손님 [SQL Query] 날짜 [2012.09.19 00:44:50]


아직 초보라 질문 드립니다.

차량 대여 관련해서 프로그램 공부중입니다.

일단 차량을 등록을 하는데

차량 등록일이 A사용자에게 S-dt : 2012-0919 E-dt : 20120929 이렇게 등록을 하였습니다.

키는 사번 , s-dt 입니다.

날짜가 중첩이 되면 안된는경우가 있어 질문 드립니다.

   ------------------------------------------------------------------
   I I
s-dt e-dt 
   I I
    ------------
그림이 좀 이상 하지만 위에 점선 사이는 포함 , 중첩이므로 등록을 할수 없다고 처리 하고 싶은데

어떤식으로 쿼리를 짜야 할찌 궁금합니다.  between을 사용하면 포함된 날짜만 찾을수 있으니

부탁드리겠습니다 고수님들
by 손님 [2012.09.19 01:04:06]

위에 그림이 이상해서 말로 설명 드리겠습니다

컬럼에 이런식으로 등록 되어 있습니다.

S-dt : 2012-0919 E-dt : 20120929

새로 등록시 안되는 조건이

S-dt : 2012-0920~  E-dt : 20120929 기존 등록된 S-dt에 값에 포함 되어 있어 안되고

S-dt : 2012-0910~  E-dt : 20121009 기존 등록된 S-dt~E-DT값에 중첩이 안됩니다.

이걸 쿼리로 할려니 위에 첫번재는

SELECT * FROM T
WHERE 입력값(S-DT) BETWEEN S-dt  AND E-dt  OR 입력값(E-DT) BETWEEN S-dt  AND E-dt 
이렇게 하면 될듯한데 두번째랑 합쳐서 할려니 머리가 안돌아 가네여
고수님들에 조언을 듣고 싶습니다.


by 마농 [2012.09.19 01:20:57]
-- 시작일과 종료일을 서로 교차비교하시면 됩니다.
SELECT COUNT(*)
  FROM t
 WHERE sdt <= :v_edt
   AND edt >= :v_sdt
   AND ROWNUM = 1 -- 중복건은 1건만 가져오면 됨. 굳이 다 가져올 필요 없음
-- AND id = :v_id -- 전체체크인지? 사용자별 체크인지에 따라 적용여부 판단
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입