본문 바로가기
DB/Oracle

내장 함수_ 문자열

by so_o 2021. 6. 29.
1. 문자열 함수
2. 숫자 함수
3. 날짜 함수
4. 변환 함수
5. NULL 관련 함수
6. 집계 함수

 

 


1. 문자열 함수

  1) SUBSTR
     SELECT SUBSTR('HELLO', 1, 3) FROM DUAL;
        => 1번째부터 3번째까지 출력
        => 결과 : HEL

     SELECT SUBSTR('HELLO', 3) FROM DUAL;
        => 3번째부터 출력
        => 결과 : LLO

   2) SUBSTRB
     SELECT SUBSTRB('HELLO', 3) FROM DUAL;
        => 3번째 byte부터 출력됨
             한글은 1글자가 3byte이므로 영어랑 다르게 출력됨
        => 결과 : LLO

   4) TRIM (TRIM, LTRIM, RTRIM)
      => 빈 공백을 없애는 함수

   5) LOWER
      => 소문자로 변겅

   6) UPPER
      => 대문자로 변경

   7) REPLACE, TRANSLATE
      => 문자 바꿔주는 함수

   8) PAD
      => 출력하고자 하는 문자열이 있을 때 너비를 고정하는 함수

   9) INITCAP
      => 첫 글자를 대문자로 바꿔주는 함수

   10) INSTR
      => 문자열의 위치를 알려주는 함수

   11) LENGTH
      => 문자열 길이를 얻는 함수

 

SUBSTR

 

<예제>

모든 학생의 이름과 출생 월만 조회하기

 

(1) MEMBER 테이블의 NAME과 BIRTHDAY 값을 모두 출력

      SELECT NAME BIRTHDAY FROM MEMBER;

   

 

(2) SUBSTR 사용해서 값 출력

     SELECT NAME, SUBSTR(BIRTHDAY, 6, 2) FROM MEMBER;

 

 

 

3) SUBSTR 이용해서 출력한 값의 컬럼명 별칭 사용

     SELECT NAME, SUBSTR(BIRTHDAY, 6, 2) MONTH FROM MEMBER;

 

 

 

<예제>

회원 중에서 전화번호가 011으로 시작하는 회원의 모든 정보를 출력하기

 

1) SUBSTR 함수 이용

SELECT * FROM MEMBER WHERE SUBSTR(PHONE, 1, 3) = '011';

2) LIKE 이용

SELECT * FROM MEMBER WHERE PHONE LIKE '011%';

 

 

 

<예제>

회원 중에서 생년 월이 7, 8, 9월인 회원의 모든 정보를 출력하기

 

=> MEMBER의 모든 회원 출력

 

 

   (방법_1)

SELECT * FROM MEMBER WHERE SUBSTR(BIRTHDAY, 6, 2) = '07' 
         OR SUBSTR(BIRTHDAY, 6, 2) = '08' 
         OR SUBSTR(BIRTHDAY, 6, 2) = '09';

 

 

   (방법_2)

SELECT * FROM MEMBER SUBSTR(BIRTHDAY, 6, 2) IN ('07', '08', '09');

   => 생일이 07, 08, 09이 아닌 회원을 출력하기

SELECT * FROM MEMBER WHERE SUBSTR(BIRTHDAY, 6, 2) NOT IN('07', '08', '09');

 

 

 

<예제>

전화번호를 등록하기 않은 회원 중에서 생년 월이 7, 8, 9월인 회원의 모든 정보를 출력하시오

SELECT * FROM MEMBER WHERE SUBSTR(BIRTHDAY, 6, 2) IN ('07', '08', '09') AND PHONE IS NULL

 

 

 


 

 

CONCAT

문자열 덧셈 함수

 

   (방법_1)

   SELECT CONCAT('홍', '길동') FROM DUAL;

 

   (방법_2)

   SELECT '3' || '4' FROM DUAL;

   SELECT '홍' || '길동' FROM DUAL;  

 

 

 


 

 

 

TRIM

빈 공백을 없애는 함수

 

   1) LTRIM

SELECT LTRIM('   HELLO   ') FROM DUAL;

 

   2) RTRIM

SELECT RTRIM('   HELLO   ') FROM DUAL;

   

   3) TRIM

SELECT TRIM('   HELLO   ') FROM DUAL

 

 


 

 

 

LOWER, UPPER
SELECT LOWER('tIRgER') FROM DUAL;

 

1) LOWER

 => 소문자로 변경

 

 

2) UPPER

=> 대문자로 변경

 

 

<예제>

회원의 아이디가 'tiger'인 회원을 조회하기 (단, 대소문자를 가리지 않음)

 

SELECT * FROM MEMBER WHERE UPPER(ID) = 'TIGER';
SELECT * FROM MEMBER WHERE LOWER (ID) = 'tiger';

* WHERE문이

  'TIGER' (대문자)이면 UPPER을 사용하고

  'tiger' (소문자)이면 LOWER을 사용한다 

 

 

 

 


 

 

REPLACE, TRANSLATE

=> 문자 바꿔주는 함수

 

1) REPLACE

SELECT REPLACE('WHERE WE ARE', 'WE', 'YOU') REPLACE FROM DUAL;

     => WE를 YOU로 바꿔준다.

 

 

2) TRANSLATE

SELECT TRANSLATE('WHERE WE ARE', 'WE', 'YOU') TRANSLATE FROM DUAL;

    => W는 Y로 변경

        E는 O로 변경

        U는 의미 없음

 

 

 

<예제>

회원의 이름과 메일을 조회하기 (단, 메일은 빈칸 없이 조회하기)

SELECT NAME, REPLACE(EMAIL, ' ', '') FROM MEMBER;

   => ' '(공백)을 ''(공백 없음)으로 REPLACE(바꾸기)

 

 

 


 

 

PAD
SELECT LPAD('HELLLO', 5) FROM DUAL;
-- 빈공간 없음

SELECT LPAD('HELLO', 10, '0') FORM DUAL;
-- 나머지 5자를 0으로 채워라
-- 결과 : 00000HELLO

SELECT RPAD('HELLO', 10, '0') FROM DUAL;
-- 결과 : HELLO 00000

<예제>

회원의 이름을 조회하기 (단, 이름의 길이가 3자가 안되는 경우는 이름 오른쪽을 밑줄('_')로 채우기

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

=> PAD는 한글과 영어를 사용할 때 결과다 다르므로 조심해야 한다.

 

 


 

 

INITCAP

=> 첫 글자를 대문자로 바꿔주는 함수

 

SELECT INITCAP('the') FROM DUAL;
-- 결과 : The

SELECT INITCAP('the most important') FROM DUAL;
-- 결과 : The Most Important

 

 


 

 

INSTR

=> 문자열이 존재하는지 알려주는 함수

SELECT INSTR('ALL WE NEED TO IS JUST TO', 'TO') FROM DUAL;
-- 결과 : 13

SELECT INSTR('ALL WE NEED TO IS JUST TO', 'TO', 15) FROM DUAL;
-- 결과 : 24
-- 15번째 이후에 있는 TO의 위치


SELECT INSTR('ALL WE NEED TO IS JUST TO', 'TO', 1, 2) FROM DUAL;
-- 결과 : 24
-- 1번째 찾은 문자부터 시작해서 2번째 찾은 문자의 위치
-- 해당 문자열의 위치를 셀 필요가 없음

 

<예제>

회원의 전화번호에서 두 번째 대시(-) 문자가 존재하는 위치를 출력하기

SELECT INSTR(PHONE, '-', 1, 2) FROM MEMBER;

 

<예제>

회원의 전화번호에서 첫 번째 대시(-) 문자와 두 번째 대시(-) 문자 사이의 간격

SELECT INSTR(PHONE, '-', 1, 2) - INSTR(PHONE, 1, 1)-1  FROM MEMBER;

 

<예제>

회원의 전화번호에서 첫 번째와 두 번째 사이의 국번을 출력하기

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

 

 


 

 

 

LENGTH

=> 문자열 길이를 얻는 함수

SELECT LENGTH(NAME) FROM MEMBER;
--MEMBER테이블의 NAME의 길이를 구함

SELECT MEMBER.NAME, LENGTH(NAME) FORM MEMBER;
-- NAME과 NAME의 길이를 구함

<예제>

모든 회원의 핸드폰 번호와 번호의 문자열 길이를 조회하기

SELECT PHONE, LENGTH(PHONE) FROM MEMBER;

 

<예제>

회원의 전화번호 컬럼에 포함된 문자 '-'를 없앤 전화번호의 길이를 출력하기

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

 

'DB > Oracle' 카테고리의 다른 글

내장함수_ 날짜  (0) 2021.07.01
내장함수_ 숫자  (0) 2021.07.01
중복 값 제거 (DISTINT)  (0) 2021.06.29
ROWNUM  (0) 2021.06.29
정규식  (0) 2021.06.29