DATOR


심심해서 진행하는 SQL 꼼수 SQL


안녕하세요^^


종종 생각날때마다 적는 SQL꼼수의 첫번째 시간이???


그럼 시작합니다.


누군가 컬럼의 데이터의 대문자 여부를 알려달라고하더군요...

흠 !!!

정규식을 사용해서 처리해야지

  REGEXP_INSTR(특정컬럼, '[^A-Z]')


 

아 오라클이 9i입니다

라고 하면 좀 고민에 빠지게 됩니다.



그래서 생각해낸 꼼쑤는...


 
 with t as

(

select 'aBCdefG'  syn from dual union all

select 'abcdefg' from dual union all 

select 'ABCDEFG' from dual

)select syn 원본

        , lengthb(syn) 크기확인

        , translate(syn,'ABCDEFGHIGJNLMOPQRSTUVWXYZ','$') 변경자료

        , lengthb(translate(syn,'ABCDEFGHIGJNLMOPQRSTUVWXYZ','$')) 변경된자료크기    

from t






대문자.JPG


결과값을 보여줍니다.


대상 결과를 보면서 

1번 데이터는 대소문자의 혼합

2번 데이터는 소문자만

3번 데이터는 대문자만


이라는 형태를 띄고 있는데


요지가 무엇이었냐!!!

컬럼에 대문자로 들어간 데이터의 여부를 확인하고 싶습니다.


그렇다면 종료되었네요.

length 를 비교하여서 소문자만 있는 데이터는 

자신의 크기확인 = 변경된자료크기 


대문자가 있는 데이터는

자신의 크기확인 <> 변경된 자료크기


이므로 ............

 

with t as

(

select 'aBCdefG'  syn from dual union all

select 'abcdefg' from dual union all 

select 'ABCDEFG' from dual

)select 원본 from

(select syn 원본

        , lengthb(syn) 크기확인

        , translate(syn,'ABCDEFGHIGJNLMOPQRSTUVWXYZ','$') 변경자료

        , lengthb(translate(syn,'ABCDEFGHIGJNLMOPQRSTUVWXYZ','$')) 변경된자료크기    

from t

) where 크기확인 <> 변경된자료크기




 

으로 추출하면 됩니다.


수고하세요.

Tag :

Leave Comments