지역번호를 추출하려고 하는 경우 지역번호가 두 글자인 것도 있고 세 글자인 것도 있다. 이 경우는 어떻게 접근해야 할까?
이럴 떄에는 문자열 위치 함수를 사용한다.
문자열 위치 함수는 instr이며,
instr(원본대상, 찾을 문자열[, 시작위치] [, 발견횟수])
형태로 사용된다.
시작위치 생략 시 처음부터 추출되며, 시작위치가 음수일 경우에는 거꾸로 스캔한다. ★역방향으로 스캔한다는 점은 substr과 다르므로 헷갈리지 말자.
또한 발견 횟수 생략 시 첫 번쨰로 발견되는 문자열의 위치를 리턴한다.
그리고 자리수를 추출하므로 리턴 데이터 타입은 숫자이다. 찾을 문자열이 없으면 0을 리턴하게 된다.
한 줄씩 해석하자면
instr('a#b#c#','#')은 #이 첫 번째로 발견되는 위치이므로 2를 리턴
instr('a#b#c#','#', 2)는 두 번째 자리에서 시작하여 #이 처음 발견되는 위치를 리턴
instr('a#b#c#','#', 2, 3)는 두 번째 자리에서 시작하여 #이 문장 내에 세 번째에 위치한 자리를 리턴
instr('a#b#c#','#', -2)는 뒤에서 두 번째 자리, 여기서는 C 이며 C에서 역으로 스캔하여 나오는 첫 번째 #의 자리이므로 4를 리턴
instr('a#b#c#','!')는 문장 안에서 !을 찾는다는건데 느낌표는 문장 내에 없으므로 0을 리턴
아래 예제를 풀어보자.
student 테이블에서 각 학생의 이름과 지역번호를 추출하면 아래와 같다.
이메일에서 아이디만을 추출해보면,
다음은 문자열 길이를 나타내는 함수 length를 알아보자.
length(대상)
위와 같은 형태로 작성하면 된다.
length()는 함수의 문자열의 길이를 반환하고, lengthb()는 함수의 문자열의 바이트 수를 반환한다.
그냥 길이를 재는 함수이므로 실습은 생략해야지.
'배우기 > 복습노트[oracle sql]' 카테고리의 다른 글
[복습] SQL | Oracle 문자 함수: 문자열 치환(삭제) 함수(replace) 그리고 translate (0) | 2023.10.28 |
---|---|
[복습] SQL | Oracle 문자 함수: 문자열 삽입 함수(lpad, rpad), 문자열 삭제 함수(trim, ltrim, rtrim) (0) | 2023.10.27 |
[복습] SQL | Oracle 문자 함수: 대소치환 함수(upper, lower, initcap), 문자추출 함수(substr) (0) | 2023.10.27 |
[복습] SQL | Oracle 논리연산자와 기타연산자 + 복습 후기(20231026) (0) | 2023.10.26 |
[복습] SQL | Oracle 테이블 레이아웃 확인 방법과 Null의 개념 (0) | 2023.10.26 |