Study📚/Oracle

Oracle - 문자열 함수

woo!na 2023. 11. 5. 22:09

 

- CONCAT()

마치... ||

문자열과 문자열을 결합시켜주는 함수이지만, 내부적으로 숫자나 날짜를 문자로 변환해주는 과정이 포함되어 있다

SELECT CONCAT(SYSDATE,'이동욱보고싶다')
FROM DUAL;
--==>> 20231105이동욱보고싶다

 

- SUBSTR(), SUBSTRB()

문자열을 추출하는 기능을 가진 함수이다. 마치 자바의 SUBSTR() 은 갯수 기반, SUBSTR() 바이트 기반으로 연산되기 때문에 후자를 이용하는 상황에는 신중하게 사용해야 한다.

참고로 저는 바이트 기반으로 해낼 자신이 없어요

SELECT SUBSTR(NAME,1,3)
FROM MY_MAN;
--==>>
/*
이동욱
남궁민
 :
 :
*/

-- SUBSTR(추출의 대상, 추출을 시작하는 인덱스, 추출할 문자열의 갯수)
-- 이 때 세 번째 파라미터 값은 생략이 가능하며, 생략하면 문자열의 길이 끝까지 추출된다.

 

- LENGTH(), LENGTHB()

문자열의 길이를 추출하는 함수이다. SUBSTR과 동일하게 전자는 갯수 기반, 후자는 바이트 기반이다.

SELECT LENGTH('HI')
FROM DUAL;
--==>> 2

-- LENGTH(컬럼명 혹은 문자열)

 

- INSTR()

대상 문자열에서 특정 문자열이 등장하는 위치(인덱스)를 반환한다.

SELECT SELECT 'ORACLE ORAHOME BIORA' "COL1" 
    , INSTR('ORACLE ORAHOME BIORA', 'ORA', 1, 1) "COL2"     -- 1 
    , INSTR('ORACLE ORAHOME BIORA', 'ORA', 1, 2) "COL3"     -- 8 
    , INSTR('ORACLE ORAHOME BIORA', 'ORA', 2, 1) "COL4"     -- 8 
    , INSTR('ORACLE ORAHOME BIORA', 'ORA', 2) "COL5"        -- 8 
    , INSTR('ORACLE ORAHOME BIORA', 'ORA', 2, 3) "COL6"     -- 0 
FROM DUAL; 
--==>> ORACLE ORAHOME BIORA 1 8 8 8 0

-- INSTR(대상 문자열, 찾을 문자열, 찾기 시작하는 위치, 몇 번째 등장하는 값을 찾을 것인지)
-- 이 때, 세 번째 파라미터 값이 1일 경우(찾을 문자열이 처음으로 등장할 때) 생략이 가능하다.

 

- REVERSE()

대상 문자열을 거꾸로 반환한다. 단, 한글은 사용이 불가능하다<왜요!!!!!!

SELECT REVERSE('HEY')
FROM DUAL;
--==>> YEH

REVERSE(뒤집을 문자열)

 

- LPAD(), RPAD()

Byte 를 확보하여 왼쪽부터 문자를 채우는 기능을 가진 함수이다.

SELECT LPAD('ORACLE',10,'*')
-- 처리 순서
/*
10Byte 공간을 확보한다. (두 번째 파라미터)
확보한 공간에 'ORACLE' 문자열을 담는다. (첫 번째 파라미터)
남아있는 Byte 공간을 왼쪽부터 세 번째 파라미터 값으로 채운다. (세 번째 파라미터)
*/
FROM DUAL;
--==>> ****ORACLE

-- LPAD(담을 문자열, 확보할 공간, 남는 공간에 채울 문자)
-- RPAD 는 왼쪽부터 -> 오른쪽부터 만 바뀜

 

- LTRIM(), RTRIM()

대상 문자열에서 왼쪽(오른쪽)부터 연속적으로 지정 문자열과 같은 글자가 등장할 경우 이를 제거하고 남은 결과값을 반환한다.

SELECT 'ORAORAORAORACLEORACLE'"COL1" 
    , LTRIM('ORAORAORAORACLEORACLE', 'ORA') "COL2" 
    , LTRIM('AAAAAAAAAORACLEORACLE', 'ORA') "COL3" 
    , LTRIM('ORAORAoRAORACLEORACLE', 'ORA') "COL4" 
    , LTRIM('ORAORA ORAORACLEORACLE', 'ORA') "COL5" 
    , LTRIM('                ORACLE', ' ') "COL6"   -- 왼쪽 공백 제거 
    , LTRIM('                ORACLE') "COL7"        -- 두 번째 파라미터 생략 
FROM DUAL; 
--==>>  
/* 
ORAORAORAORACLEORACLE 
CLEORACLE 
CLEORACLE 
oRAORACLEORACLE 
 ORAORACLEORACLE 
ORACLE 
ORACLE 
*/

-- LTRIM(대상 분자열, 제거할 문자열)
-- 이 때, 제거할 문자열이 공백인 경우 두 번째 파라미터 생략이 가능하다

 

- TRANSLATE()

문자열을 1:1로 바꿔준다

SELECT TRANSLATE('MY ORACLE SERVER' 
                , 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
                , 'abcdefghijklmnopqrstuvwxyz') "COL1" 
FROM DUAL; 
--==>> my oracle server 

SELECT TRANSLATE('010-9322-9643' 
                , '0123456789' 
                , '공일이삼사오육칠팔구') "COL1" 
FROM DUAL; 
--==>> 공일공-구삼이이-구육사삼

-- TRANSLATE(대상 문자열, 이런 문자열이 나온다면, 하나하나 이렇게 바꾸자)

 

- REPLACE()

대상 문자열에서 지정 문자열을  모두 새로운 문자로 바꿀 수 있다.

SELECT REPLACE('MY ORACLE SERVER ORAHOME', 'ORA', '오라') "COL1" 
FROM DUAL; 
--==>> MY 오라CLE SERVER 오라HOME

SELECT REPLACE('010-1234-1234','-','')
FROM DUAL;
--==>> 01012341234

-- REPLACE(대상 문자열, 바뀔 문자열, 바꿀 문자열)