반응형

사막에서 바늘찾기[사막에서 바늘찾기]



안녕하세요


오늘은 빅데이터를 오라클로 사용하려면 알아둬야하는 함수 정규식 함수에 대해 알아보겠습니다.


정규식이란


문자열 데이터의 간단한 패턴 및 복잡한 패턴을 검색하고 조작할 수 있습니다.



메타문자리터럴을 사용하여 정규식을 지정합니다.



     메타문자: 검색 알고리즘을 지정하는 연산자


     리터럴: 검색 중인 문자



여기서 사용할 메타문자는 여기서 찾아보실 수 있습니다.



SQL 및 PL/SQL에서 정규식 함수의 종류


 함수 이름

  설명

 REGEXP_LIKE

 일반 like보다 더 복잡한 패턴의 데이터를

 검색할 수 있는 함수

 REGEXP_REPLACE

 일반 replace보다 더 복잡한 패턴의 데이터를

 다른 데이터로 대체하는 함수

 REGEXP_INSTR

 일반 instr보다 더 복잡한 패턴의

 철자 또는 단어의 자릿수를 찾는 함수

 REGEXP_SUBSTR

 지정된 문자열 내에서 정규식 패턴을 검색하고

 일치하는 부분 문자열을 출력하는 함수

 REGEXP_COUNT

 문장 내에서 특정 단어가 몇 번 나오는지

 출력하는 함수




예제를 통해 각각의 함수에 대해 알아보도록 하겠습니다.


[사원]


EMPNO

ENAME

JOB

SAL

DEPT

 ALLEN

 SALESMAN

 1250

 서울시 강남구

 2 

 BAKE

 SALESMAN

 1600

 서울시 강남구

 3 

 CLARK

 MANAGER

 3000

 세종시

 4 

 WARD

 CLERK

 1100

 인천광역시

 5 

 JAMES

 ANALYST

 3000

 부산광역시

 6 

 FORD

 ANALYST

 3000

 세종시

 7 

 SMITH

 CLERK

 1300

 세종시

 8 

 MILLER

 MANAGER

 2450

 서울시 강남구




예제1. 이름에 W 또든 K가 들어가는 사원들의 이름을 뽑아주세요.



메타문자 참고

 | : 또는을 의미한다.

( ... ) 괄호로 묶인 표현식을 한 단위로 취급



[결과]


EMPNO

ENAME

JOB

SAL

DEPT

 2 

 BAKE

 SALESMAN

 1600

 서울시 강남구

 3 

 CLARK

 MANAGER

 3000

 경기도 과천시

 4 

 WARD

 CLERK

 1100

 인천광역시




예제2. 부서컬럼에서 (구를 제외한) 도시명만 뽑아주세요



메타문자 참고

^ : not을 의미한다.

+ : 1이상의 문자열

 : 공백


쿼리 설명: 

dept에서 첫번째 단어( 공백을 만나기 전까지 한 단어)만 출력하는 쿼리문입니다.



[결과]


EMPNO

ENAME

JOB

SAL

DEPT

 ALLEN

 SALESMAN

 1250

 서울시

 2 

 BAKE

 SALESMAN

 1600

 서울시

 3 

 CLARK

 MANAGER

 3000

 경기도

 4 

 WARD

 CLERK

 1100

 인천광역시

 5 

 JAMES

 ANALYST

 3000

 부산광역시

 6 

 FORD

 ANALYST

 3000

 세종시

 7 

 SMITH

 CLERK

 1300

 세종시

 8 

 MILLER

 MANAGER

 2450

 서울시




예제3. '오라클사에서 만든 오라클 데이터베이스에서도

정규식 오라클 SQL함수를 제공한다'

라는 문장에서 SQL이 몇번 언급되었는지 세어주세요.




결과는 3이 출력되겠죠?


많은 문장이 들어있는 테이블에서 위의 방법으로

가장 많은, 적은 단어를 찾는 등 다양한 응용이 가능합니다.


빅데이터 중 유용한 데이터를 찾는데 도움을 주는 정규식함수를 잘 활용해봅시다~



regexp_replace함수는 전 포스팅에서 다뤘습니다.



오늘은 여기까지!


내일부터는 SQL튜닝방법으로 돌아오겠습니다!




이 글이 도움되셨다면 아래 공감 꾹~ 



반응형
반응형


SQL이란,



 관계형 데이터베이스 관리 시스템에서


 자료의 검색 및 관리 등을 위해 설계된 프로그래밍 언어입니다.


출처: 위키백과




이러한 SQL 에는 다양한 함수가 존재하는데요.


이러한 함수는 크게 '단일 행 함수'와 '복수 행 함수'로 나뉠 수 있습니다.






오늘은 단일 행 함수의 속하는 다양한 함수 중 문자함수에 대해 알아보겠습니다.





데이터 검색을 할 때 함수가 필요한 이유는 무엇일까요?



그 이유는!



함수를 이용하면 더 다양하게 데이터를 검색할 수 있기 때문입니다.



문제를 통해 이 사실을 확인합시다.


현재 DB에 있는 EMAIL의 형식을 아래와 같이 가정합니다.


                       '아이디 @ naver.com'

'아이디 @ daum.com'

'아이디 @ gmail.com'


 .

 .

 .

 .




과연 함수 없이 다음 문제를 풀 수 있을까요?



문제1. 이메일에서 @가 몇 번째 철자에 있는지 알려주세요!



문제2. 내 이메일 주소를 다른 사람이 알 수 없도록 다른 철자로 변경해주세요!



문제3. 이메일을 입력하다 모르고 처음에 공백을 넣어서 찾을 수가 없습니다. 해결해주세요.




이때 사용하는 함수를 각각 소개하겠습니다.


문제1. 이메일에서 @가 몇 번째 철자에 있는지 알려주세요!






이 때 사용하는 함수가 바로 INSTR 함수입니다.


instr함수는 특정 철자가 단어에서 몇 번째 철자인지 확인하는 함수죠!


(단, 처음 나오는 특정 철자의 자리를 알려준답니다!)



형식: 


 INSTR (string, substring [, position ] )



'string'


 입력할 문자열을 지정하는 부분입니다.



'substring'


 위치를 반환할 문자열을 지정하는 것입니다.



'position'


 탐색을 시작할 string의 위치를 나타내며, 문자 재수 단위로 지정됩니다.

 이 인자가 생략되면 기본값인 1이 적용됩니다. 즉, 선택사항이죠



반환 값은 INT 형식으로 숫자가 return됩니다.


출처: CUBRID




문제2. 내 이메일 주소를 다른 사람이 알 수 없도록 다른 철자로 변경해주세요!





물론 더 좋은 보안 시스템을 이용할 수도 있죠.




하지만,


제가 여기서 강조하고 싶은 부분은 바로 'regexp_replace'함수 입니다.



regexp_replace 함수는 여러개의 철자를 한번에 다른 철자로 변경하는 함수입니다.



형식:


REGEXP_RPLACE ( source_string, pattern [ , replace_string [ , position] ] ) 



'source_string'


 열 이름 같이 검색할 문자열 표현식입니다.



'pattern'


 SQL 표준 정규 표현식 패턴을 나타내는 문자열 리터럴입니다.



'replace_string'


 발견되는 패턴을 각각 변형할 문자열 표현식(열 이름 등) 입니다. 기본값은 빈 문자열 입니다.



'position'


source_string 내에서 검색을 시작할 위치를 나타내는 양의 정수입니다. 이 위치는 바이트가 아닌 문자 수를 기준으로 하기 때문에 멀티바이트 문자도 단일 문자로 계산됩니다. 기본 값은 1입니다.



반환 값은 VARCHAR 형식으로 문자가 return 됩니다.


출처: AWS




추가) 만약 특정 철자만 다른 철자로 변경하고 싶다면 어떻게 해야할까요?



바로 replace 함수를 이용하면 됩니다.


비교해서 알아두면 좋습니다.


replace 함수와 regexp_replace 함수의 차이를 찾아보도록해요~

여기 (엄청 많은 포스팅이 있습니다!)




마지막 문제!!


문제3. 이메일을 입력하다 모르고 처음에 공백을 넣어서 찾을 수가 없습니다. 해결해주세요.





여기서 소개할 함수는 'TRIM' 함수 입니다.


TRIM함수는 특정 철자를 잘라내는 함수 입니다.

TRIM함수의 종류와 기능은 아래와 같습니다.


TRIM()

--> 양쪽 공백을 잘라내겠다

RTRIM()

--> 오른쪽 공백을 잘라내겠다.

LTRIM()

--> 왼 공백을 잘라내겠다.



형식:


TRIM( [ BOTH ] [ 'characters' FROM ] string] ) 



'BOTH'


LEADING : 왼쪽에서 제거  


TRAILING : 오른쪽에서 제거


BOTH : 양쪽에서 제거


특별히 설정해주는 값이 없으면 기본값은 BOTH 입니다.



'characters'


문자열에서 잘라낼 문자입니다. 이 파라미터를 생략하면 공백이 잘립니다.


'string'


자르기 대상이 되는 문자열입니다.



반환 값은 varchar 또는 char 문자열을 return 합니다.


출처: aws, 좋은 블로그






우와! 드디어 끝!!!


여기까지 보신 분들 오늘 남은 시간도  화이팅 합시다!



이 글이 도움되셨다면 아래 공감 꾹~ 



반응형

+ Recent posts