본문 바로가기

DB

Oracle DB SQL 문자함수(UPPER, LOWER, INITCAP, LENGTH,LENGTHB, SUBSTR, INSTR, REPLACE, CONCAT, LPAD, RPAD)

오라클(Oracle) DB 테이블(table) 없이 SELECT문  사용방법

임시테이블 : DUAL

사용방법 : SELECT [조건] FROM DUAL; 

데이터베이스 함수
[1] 대, 소문자 바꿔주는 함수

   -UPPER : 모두 대문자로
   -LOWER : 모두 소문자로
   -INITCAP : 첫글자는 대문자로, 나머지는 소문자로

 

UPPER

SELECT UPPER('AbCdEfG') AS "UPPER(대문자)" FROM DUAL;

 

 

LOWER

SELECT LOWER('AbCdEfG') AS "LOWER(소문자)" FROM DUAL;

 

 

INITCAP

SELECT INITCAP('AbCdEfG') AS "INITCAP(첫글자 대문자)" FROM DUAL;

[2] 문자열의 길이를 구하는 LENGTH()함수

 

LENGTH

--문자 하나당 1개로 보고 문자길이 출력
SELECT LENGTH('A가a!24@') AS "문자열길이" FROM DUAL;

 

[2-1] 문자의 크기를 구하는 LENGTHB() 함수

     NVARCHAR(LENGTH): 길이  VS  VARCHAR(LENGTHB) : 크기

 

LENGTHB 

--BYTE 크기대로 문자열크기 출력 ex)영어 1Byte, 한글 2Byte
SELECT LENGTHB('A가a!24@') AS "문자열크기" FROM DUAL;

 

[3] 문자열 일부를 추출하는 SUBSTR


    SUBSTR('문자열데이터' OR [COL_NAME], 시작위치, 추출길이)
    (추출길이 생략시 끝까지)

 

SUBSTR

SELECT SUBSTR('HELLO!!',3,5) FROM DUAL;

 

 

[4] 문자열 데이터 안에서 특정 문자 위치를 찾는 INSTR

      INSTR('문자열데이터' OR [COL_NAME], '찾으려는 문자', 시작위치(기본값 1),

      같은 문자일 때 몇번째 문자인지(기본값 1))

 

INSTR

 

SELECT INSTR('HELLO, ORACLE!', 'L')       AS INSTR1, -- 첫번째 'L'을 찾는 함수
       INSTR('HELLO, ORACLE!', 'L', 5)    AS INSTR2, -- 5번째 글자부터 시작해서 첫번째 'L'을 찾는 함수
       INSTR('HELLO, ORACLE!', 'L', 2, 3) AS INSTR3, -- 2번째 글자부터 시작해서 세번째 'L'을 찾는 함수
       INSTR('HELLO, ORACLE!', 'O', 1, 1) AS INSTR4, -- 1번째 글자부터 시작해서 첫번째 'O'을 찾는 함수 : 5
       INSTR('HELLO, ORACLE!', 'O', 1, 2) AS INSTR5  -- 1번째 글자부터 시작해서 두번째 'O'을 찾는 함수 : 8
FROM DUAL;

 

 

[5] 특정문자를 다른 문자로 바꾸는 REPLACE()함수

    - 기본형 : REPLACE('문자데이터' OR [COL_NAME], 찾을 문자 )
    - 선택형 : REPLACE('문자데이터' OR [COL_NAME], 찾을 문자 , 바꿀 문자 )

 

SELECT '010-1234-5678' AS "REPLACE 이전",
       REPLACE('010-1234-5678', '-') AS "REPLACE 기본형",
       REPLACE('010-1234-5678', '-', ' ') AS "REPLACE 선택형"
FROM DUAL;

 

 

[6] 두 칼럼 데이터(혹은 문자열)를 합치는 CONCAT() 함수

   - CONCAT('문자1 OR [COLUM_NAME]', '문자2 OR [COLUM_NAME]')

 

EMP 테이블

EMP 테이블

 

 

CONCAT

SELECT CONCAT(EMPNO , CONCAT('번 : ', ENAME)) FROM EMP;
-- [6-1] CONCAT 기호 : || 
-- (위의 쿼리와 동일한 출력)
SELECT EMPNO || '번 : ' || ENAME FROM EMP;

 

Q. EMP테이블에서 JOB이 SALESMAN인 사원 이름 앞에 '힘내세요' , 뒤에 '님' 붙여주기!

SELECT '힘내세요! ' || ENAME || '님' AS 화이팅
FROM EMP
WHERE JOB='SALESMAN';

 

 

[7] 데이터의 빈 공간을 특정 문자로 채우는 LPAD(), RPAD()함수

   - LPAD('문자열데이터' OR [COL_NAME], 데이터자릿수, 빈공간에 채울 문자(기본값 ' '))
   - RPAD('문자열데이터' OR [COL_NAME], 데이터자릿수, 빈공간에 채울 문자(기본값 ' '))

 

SELECT 'ICIA' AS 주어진문자열,
        LPAD('ICIA', 7) AS "LPAD기본형",
        RPAD('ICIA', 7) AS "RPAD기본형",
        LPAD('ICIA', 7, '#') AS "LPAD선택형",
        RPAD('ICIA', 7, '#') AS "RPAD선택형"
FROM DUAL;

 

 

Q. 주민번호 990307-1234567을 990307-1******로 바꾸기

SELECT '990307-1234567' AS "주민번호 공개",
RPAD(SUBSTR('990307-1234567', 1,8), 14, '*') AS "주민번호 비공개"
FROM DUAL;