본문 바로가기

배우기/복습노트[oracle sql]

[복습] SQL | Oracle 문자 함수: 대소치환 함수(upper, lower, initcap), 문자추출 함수(substr)

728x90
반응형

먼저 함수란, input value와 output value의 관계를 정의한 객체이다.

그러므로 input value가 필요하고(떄에 따라 생략 가능, 여러 개도 가능) output value가 반드시 리턴된다.

참고로 input value가 없는 함수:

select sysdate   << 이 함수 자체만으로 오늘의 날짜 출력

  from dual;        << from 절은 필수이므로 dummy 절 작성

 

함수는 from 절 제외하고는 모든 절에 함수가 들어갈 수 있다.

 

함수의 종류(input value  수에 따라)

1) 단일행 함수

2) 다중행 함수(그룹함수)

로 나뉜다.

단일행 함수는 하나의 행이 들어가서 하나의 행이 나오는 것으로 변환목적 함수 라고도 한다.

다중행 함수는 엑셀의 sum, average, max, min 등과 같은 것이 있다.

 

또한 함수는 input value 형태에 따라 

1) 문자함수

2) 숫자함수

3) 날짜함수

4) 변환함수(중요)

5) 기타함수(혹은 일반함수)

로 나뉘는데 문자함수 먼저 복습을 하고자 한다.

 

문자함수로 먼저 대소치환 함수를 살펴보자.

 

대소치환함수에는  upper, lower, initcap(카멜표기법 변환)이 있다.

테스트 결과 확인은 아래와 같다.

 

 

다음으로 문자열 추출 함수이다.

문자열 추출 함수로는 substr로 데부분의 데이터 언어에 있다.

(참고로 sql은 개발언어가 아니라 데이터 언어이며, R, Python도 마찬가지임)

 

substr(원본대상, 추출위치 [,추출개수])   추출개수 생략시 마지막까지 추출

문자열 추출 함수이므로  output value는 항상 문자 타입으로 리턴된다.

 

위 내용은 성과 이름을 추출한 것인데, 이름이 외자일 경우를 생각하여 성 한 자리 추출, 이름은 추출개수를 생략하고 프린트했다.

(성이 두 글자면 어떡하지.. 고민해봐야겠다)

 

 

주민등록번호를 사용하여 남학생 정보만 추출하고자 하는 쿼리를 생각해보자.

마지막 문장에 where substr(jumin, 7, 1) = '1'  은 아주 중요한 포인트이다.

그냥 1 이 아니라 '1' 이라고 작은따옴표로 감싸주어야 하는데, 이는  substr 결과가 문자로 리턴되므로 문자상수와 비교를 해야하기 때문이다.

단순한 이 기능 때문에 계산 성능에 심각한 문제를 유발할 수 있다고 한다.

 

 

추출 위치는 음수가 될 수도 있다.

추출 위치가 음수인 경우 뒤에서부터 추출된다(추출 방향은 정방향, 그러므로 마지막 '추출개수' 숫자는 음수가 될 수 없음).

 

728x90
반응형