Programming/SQL

SQL 문자열 내장함수 LPAD, INSTR, LENGTH. + 오라클 DBMS 와 사용자 인터페이스(SQL PLUS, SQL DEVELOPER) 2021-07-02

최동훈1 2021. 7. 2. 15:05

SQL에서 가장 대표적인 문자열 내장 함수는, 

 

LPAD,RPAD : 패딩함수

INSTR : 문자열에 포함된 문자가 어느 위치에 있는지 숫자를 반환하는 함수.

LENGTH : 문자열의 길이를 반환하는 함수.

 

등이 있다. 바로 용례를 설명하고, 문제를 풀면서 보이겠다.

LPAD, RPAD 사용법

 LPAD(문자1, 5, 문자2) 의 뜻은 문자 1을 5자리수만 출력할것인데, 만약 5자리 미만이라면, 왼쪽(Left)에 남는 자리만큼 문자 2를 채우라는 뜻이다.

 

문제 답.

SELECT RPAD(NAME,3,'_') FROM MEMBER;

 그런데 여기서 주의할 점은, 패딩함수의 인자로 오는 숫자는 바이트 단위이다. 그러므로, 한글을 자르려면, *2를 해줘야 한다.(유니코드로 한글은 1글자당 2바이트이기 떄문);

수정 답:

SELECT RPAD(NAME,6,'_') FROM MEMBER;

 

INSTR(문자열 검색함수) 사용법

INSTAR (문자열, 검색문자) -> 1번째 인덱스 부터탐색시작후 1번째로 만나는 문자의 위치를 반환.

INSTAR (문자열 , 검색문자, 탐색을 시작할 인덱스) -> 주어진 인덱스 값부터 탐색시작후 1번째로 만나는 문자의 위치를 반환.

INSTAR(문자열, 검색문자, 인덱스, 숫자) -> 주어진 인덱스부터 탐색시작후  "숫자" 번째로 만나는 문자의 위치를 반환. 즉, 만약 2라면 두번째 검색문자가 검색된 위치를 반환.

 

문제 답.

SELECT INSTR(PHONE,'-',1,2) FROM MEMBER;
--폰 번호 칼럼에서 '-' 문자를 1번째 자리부터검색하고, 2번째로 나오는 위치 바노한 

 

그다음은 문자열의 길이를 얻는 함수이다. 이건 앞서 제시한 함수보다 사용법이 쉬우니 간단한 예시만 들겠다.

SELECT LENGTH('HELLO') FROM DUAL;
--5출력됨. 말그대로, 글자의 갯수가 출력됨.

내가 이전 포스트랑 지금까지 설명한 함수를 요약해보자면, SUBSTR, LOWER, UPPER, LPAD, INSTAR, REPLACE, LENGTH 등이 있다. 이런 각각의 함수를 중첩해서, 사용하면 더욱더 정교하게 칼럼을 선별해 낼 수 있다.

 

해답.

SELECT LENGTH(REPLACE(PHONE,'-','')) FROM MEMBER;

이렇게 되면, 전화번호(칼럼)에 '-' 문자를 없앤 길이를 각 행에 출력한다.

문자열 함수중 가장 자주 쓰이는 것은 SUBSTR과 INSTR 인데 이걸 응용하는 문제를 풀어보자.

 

문제: 번호중 첫번쨰 - 와 두번쨰 - 사이에 있는 글자들을 출력하시오.

 

1.-와 -사이의 간격을 알아야한다.

2. 그 간격을 이용하여 문자열을 자른다.

 

SELECT SUBSTR(PHONE,INSTR(PHONE,'-'),INSTR(PHONE,'-',1,2)-INSTR(PHONE,'-',1,1)-1);

 

난 오늘 제대로 오라클 DBMS를 내 그램 노트북에 설치 해 보았다. 그런데 난, 이전까지 사용자가 서버에 쿼리를 날릴수 있는 창구(에디터)가 '오라클' 인줄 알았는데 그게 아니였다.. 여기서 좀 충격..

우선 DBMS는 에디터가 아니라 "서버 관리 프로그램"이다. 이클립스, VS, IJ 같은 IDE가 아니다. 이 서버관리 프로그램(DBMS)에게 일정한 명령을 날리는 에디터는 SQL PLUS 나 SQL DEVELOPER가 있다. 이것이 굳이 비교하자면 IDE 역할을 하는 것이다. 이 두개 모두 오라클에서 제공한다. 전자는 오라클 DBMS 설치시 같이 설치되고, 후자는 오라클 사이트에서 별도로 다운로드 받아야 한다.

이렇게 사용자는 오라클에 직접 접근이 불가능 하므로 DBMS에 SQL을 사용할 수 있는 인터페이스가 필요한데, 그것이 바로 sqlplus/ sql developer 등이다. 다시말하지만 오라클은 에디터나 IDE 가 아닌 관리 시스템 이다. 즉 오라클에 사용자가 직접 SQL을 넣을수 있는 방법은 없다. 무조건 다른 Client Program을 사용해야 한다.

 

공부시간 2시간.

순공부시간 1시간.

 

어제는 MySQL을 설치 인스톨러까지는 설치 했는데, EXECUTE 과정에서 Manual로 visual studio를 깔아야만 설치가 된다고 해서, 못깔고 VS만 일단 다 깔았다. VS는 처음 깔고 30일은 그냥 쓸수 있지만 이후에는 마이크로소프트 계정 로그인을 해야 한다. 로그인을 누르니 내 학교 이메일로 등록된 마이크로소프트 계정으로 연동이 됬다.. 왜 그런지 모르겠다. 난 분명 네이버 이메일로 마이크로소프트 가입했는데..ㅋㅋㅋ 아무레도 OUTLOOK 계정과 관련이 있는거 같다.

 

문득 난 JDBC도 공부해야 하는데, 왜 오라클이 아닌 MySQL을 깔았는지 몰랐다. 그럼 MySQL은 다시 스프링 공부할떄 하기로 하고, 오라클 부터 깔아야 겠다. 다음에 SQL공부랑 JDBC 공부 끝나면, MySQL 인스톨러에서부터 시작해야겠다.