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 41048 게시물 읽기
No. 41048
연속되는 문자, 숫자 구간 생성 문의 드립니다.
작성자
OTL
작성일
2016-01-11 19:34
조회수
9,103

                       
                       
연속되는 문자, 숫자를 구간으로 표현하고 싶습니다.

자주 답변 주시는 마농님께 감사 말씀 드립니다.

칼럼도 개재하시던데 축하 드리구요.

 

 구체적인 OUTPUT 은 아래와 같습니다.
 

 -- KEY 기준으로 VALUE 값 연속 구간 표현(MIN, MAX) 

key, min,max
 1, 101, 102
 1, 104, 104
 1,  A,  B
 1, 가, 나
 1, 라, 라
 2, 가, 가
 2, 하, 하
 

                       
WITH TT AS
(
SELECT 1 KEY,  '101'  VALUE FROM dual
UNION ALL SELECT 1, '102'  FROM dual
UNION ALL SELECT 1, '104' FROM dual
UNION ALL SELECT 1, '가' FROM dual
UNION ALL SELECT 1,'나' FROM dual
UNION ALL SELECT 1, '라' FROM dual
UNION ALL SELECT 1,'A' FROM dual
UNION ALL SELECT 1,'B' FROM dual
UNION ALL SELECT 2,'가' FROM dual
UNION ALL SELECT 2,'하' FROM dual
)
SELECT A.*
FROM TT A
ORDER BY KEY,VALUE;

 

 

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

데이터의 특성을 봤을 때 몇가지 특별한 가정이 필요해 보이네요.
1. 숫자와 문자가 섞여 있는데 그 자리수가 다르네요...
  숫자로 표현된 문자열은 숫자로 변경하여 문자와 분리하여 따로 처리해야 할 듯 하고
  문자는 무조건 한자리만 와야 할 것 같네요
2. "가" 다음이 "나" 네요?
   "가" 와 "나" 사이에 수많은 글자들(가귀깁)이 있는데 무시하네요.
   "가나다라마바사아자차카타파하" 만 인정하는 거겠죠?


WITH tt AS
(
SELECT 1 key, '101' value FROM dual
UNION ALL SELECT 1, '102' FROM dual
UNION ALL SELECT 1, '104' FROM dual
UNION ALL SELECT 1, '99'  FROM dual
UNION ALL SELECT 1, '100' FROM dual
UNION ALL SELECT 1, '가'  FROM dual
UNION ALL SELECT 1, '나'  FROM dual
UNION ALL SELECT 1, '라'  FROM dual
UNION ALL SELECT 1, 'A'   FROM dual
UNION ALL SELECT 1, 'B'   FROM dual
UNION ALL SELECT 2, '가'  FROM dual
UNION ALL SELECT 2, '하'  FROM dual
)
SELECT key
     , NVL(TO_CHAR(MIN(x)), MIN(value)) s
     , NVL(TO_CHAR(MAX(x)), MAX(value)) e
     , COUNT(*) cnt
  FROM (SELECT key, value
             , TO_NUMBER(REGEXP_SUBSTR(value, '[0-9]+')) x
             , INSTR( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'||' '||
                      'abcdefghijklmnopqrstuvwxyz'||' '||
                      '가나다라마바사아자차카타파하'
                    , REGEXP_SUBSTR(value, '[^0-9]')
                    ) y
          FROM tt
         ORDER BY key, x, y
        )
 GROUP BY key, x - ROWNUM, y - ROWNUM
 ORDER BY key, MIN(x), MIN(value)
;

마농(manon94)님이 2016-01-12 10:50에 작성한 댓글입니다.
이 댓글은 2016-01-12 11:01에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
41052pl/sql 여러 테이블에 여러 칼럼 지우고 싶습니다. [2]
조윤상
2016-01-18
8623
41050조회 속도를 개선하고 싶습니다. [2]
선이
2016-01-14
9185
41049파라메터 설정(긴급문의) [1]
이현정
2016-01-12
8493
41048연속되는 문자, 숫자 구간 생성 문의 드립니다. [1]
OTL
2016-01-11
9103
41047pl/sql에 관해 여쭙니다.
seung
2016-01-07
8454
41046쿼리문안에 INTO이건 어떨때 쓰나요? [2]
seung
2016-01-07
8727
41045테이블, 뷰의 속성 조회 [3]
정재봉
2016-01-06
8958
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.029초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다