특정컬럼에 있는 대문자 데이터를 검색하고 싶습니다. 0 6 11,032

by 비타민 [Oracle 기초] 9i oracle 대문자 [2014.12.02 11:00:21]


제목과 동일합니다.

 

특정 테이블에 있는 특정 컬럼의 데이터 중 대문자 데이터만 뽑아내고 싶습니다.

검색해보니 SELECT REGEXP_INSTR(특정컬럼, '[^A-Z]') 를 써서 검색하는게 있던데, 9i라 사용할 수가 없네요,

 

방법이 없을까요?

 

제가 뽑을려는 컬럼은 id 컬럼인데 id가 대문자로 되어있는 것도 있고(소문자만 있어야하는데),

추가로 대문자로 된 데이터와 동일한 소문자 데이터도 있는 실정입니다.(id만 대/소문자 구분되어 있고 내용 같음)

 

어쩌다가 id에 이런 데이터들이 들어가있는지 모르겠는데,

개발 중 프로시저로 돌아가는 부분이 누락이 되어서 보니 저렇네요.

 

이 데이터들을 뽑아내려는 것이 핵심입니다.

1. ID컬럼 의 대문자 데이터만 뽑아내기

2. ID컬럼의 대문자 데이터와 일치하는 소문자 ID 데이터 뽑아내기

 

조언 부탁드립니다.

by 우리집아찌 [2014.12.02 11:05:53]

하나씩 ASCII로 뽑아서 비교하심은.. ㅡㅡ;

 


by 부쉬맨 [2014.12.02 11:14:23]
with t as
(
select 'aBCdefG'  syn from dual union all
select 'abcdefg' from dual union all 
select 'ABCDEFG' from dual
)select syn
        , lengthb(syn)
        , lengthb(translate(syn,'ABCDEFGHIGJNLMOPQRSTUVWXYZ','$'))   
from t

2번은 대상 쿼리로 추출하시면될듯합니다?


by jkson [2014.12.02 11:17:36]

그냥 LOWER(ID) != ID 하면 되지 않을까 싶네요.


by 마농 [2014.12.02 11:29:44]
WITH t AS
(
SELECT 'AAA' id FROM dual
UNION ALL SELECT 'aaa' FROM dual
UNION ALL SELECT 'BBB' FROM dual
UNION ALL SELECT 'bbb' FROM dual
UNION ALL SELECT 'Bbb' FROM dual
UNION ALL SELECT 'bBb' FROM dual
UNION ALL SELECT 'bbB' FROM dual
UNION ALL SELECT 'BBb' FROM dual
UNION ALL SELECT 'BbB' FROM dual
UNION ALL SELECT 'bBB' FROM dual
UNION ALL SELECT 'ccc' FROM dual
UNION ALL SELECT 'DDD' FROM dual
)
-- 오류자료(소문자가 아닌, 대문자 포함) 그룹핑하여 뽑기.
SELECT LOWER(id) id
     , COUNT(*) cnt
     , SUBSTR(XMLAGG(XMLELEMENT(x, ',', id) ORDER BY id DESC).EXTRACT('//text()'), 2) list
  FROM t
 GROUP BY LOWER(id)
 HAVING SUM(DECODE(LOWER(id), id, 0, 1)) > 0
;

 


by 비타민 [2014.12.02 11:44:59]

역시 다양한 답변과 다양한 방법.

테스트해보니 잘 되네요.  답변 주신 분 모두 감사합니다.

 


by 신이만든짝퉁 [2014.12.02 14:08:44]

와~ 다들 대단하시네요.


 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입