database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 21087 게시물 읽기
No. 21087
시작일과 종료일이 있을때 기존 데이터와 중복되지 않으려면?
작성자
하늘소
작성일
2004-12-17 08:40
조회수
2,195

오라클에 O자가 어떻게 생겼는지 겨우 안 초보입니다..

간단할것 같으면서도.. 좀처럼 까다롭네요..

테이블에는 시작일(20041201)과 종료일(20041210)이 있습니다.

이럴때에 새 데이터가 기존데이터의 기간과 중복이 되면 안되도록 쿼리 하고 싶습니다.

즉, insert할 값을 기준으로 기존테이블에서 select 하여 중복되면 false를, 아니라면 true를

반환하고 싶은데 쉽지가 않네요..

 

select * from istable where is_date_start >= new_date_start and is_date_end <= new_date_end;

 

????

이 글에 대한 댓글이 총 2건 있습니다.

중복이 되려면 아래의 경우가 있겠네요.

 

1. 새 데이터의 시작일이 기존데이터의 시작일과 종료일 사이에 있음

2. 새 데이터의 종료일이 기존데이터의 시작일과 종료일 사이에 있음

3. 새 데이터의 시작일이 기존데이터의 시작일보다 빠르고

     새 데이터의 종료일이 기존데이터의 종료일보다 늦음.


위의 3가지 경우는 아래와 같이 표현될 수 있겠네요.

 

CASE WHEN new_date_start >= is_date_start  AND

                   new_date_start <= is_date_end THEN 'false'

         WHEN new_date_end >= is_date_start AND

                  new_date_end <= is_date_end THEN 'false'

         WHEN new_date_start < is_date_start AND

                  new_date_end > is_date_end THEN 'false'

         ELSE 'true'  END

 

( 여기서 부터 추가 ;; )

중복이 안되려면 아래의 경우가 있겠네요. 이게 더 쉽겠네요..;;

 

1. 새 데이터의 시작일이 기존데이터의 종료일보다 늦음.

2. 새 데이터의 종료일이 기존데이터의 시작일보다 빠름.

 

CASE WHEN new_date_start > is_date_end THEN 'true'

         WHEN new_date_end < is_date_start THEN 'true'

         ELSE 'false'  END

 

가람님이 2004-12-17 10:02에 작성한 댓글입니다.
이 댓글은 2004-12-17 10:10에 마지막으로 수정되었습니다. Edit

아래의 두가지만 체크하면 되지 않나요?

 

insert into istable
select /*+ index_desc(a pk_idx) */   /* 아마도 시작일, 종료일이 PK가 아닐런지 */
       new_date_start
      ,new_date_end
from istable a
where a.is_date_end < new_date_start   /* 입력된 시작일이 기존의 종료일보다 커야함 */
and new_date_end > new_date_start    /* 입력된 종료일이 입력된 시작일보다 커야함 */
and rownum = 1                       /* 현재자료의 최종한 건과 비교함 */

 

이렇게 한후 sql%rowcount = 1 이면 입력된 것이고 0이면 입력되지 않는 걸루 자료가 잘못된 걸루 간주하면 되지 않을까요?

ccr님이 2004-12-17 11:03에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
21091기초적 인덱스 관련 질문요. [1]
Jung
2004-12-17
1944
21090실시간으로 데이터 변경을 알 수 있는 방법은? [4]
복팅이
2004-12-17
2286
21089오라클 동시접속 최대 값이 몇 connect인가요? [3]
toomany
2004-12-17
16153
21087시작일과 종료일이 있을때 기존 데이터와 중복되지 않으려면? [2]
하늘소
2004-12-17
2195
21086long형 Insert 에러 좀 봐주세요. [2]
이창호
2004-12-16
3439
21085오라클 백업에 관한 질문 [1]
초보자
2004-12-16
1831
21084익스포트시 에러가 발생하는데..에러원인을 도저히 모르겠습니다. [1]
이경재
2004-12-16
2162
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다