hyeonga_code

Database_15_문자 조작 함수_CONCAT, SUBSTR, LENGTH, LENGTHB, INSTR, LPAD, RPAD, TRIM, LTRIM, RTRIM 본문

Oracle Database

Database_15_문자 조작 함수_CONCAT, SUBSTR, LENGTH, LENGTHB, INSTR, LPAD, RPAD, TRIM, LTRIM, RTRIM

hyeonga 2023. 7. 18. 05:59
반응형

   

    -- 문자 조작 함수
             -- CONCAT      : 값을 결합합니다. 파라미터를 두 개만 사용할 수 있습니다.
             -- SUBSTR      : 지정한 길이의 문자열을 추출합니다.
             -- LENGTH/LENGTHB      : 문자열의 길이를 숫자 값으로 표시합니다.
             -- INSTR       : 지정한 문자의 위치를 숫자로 표시합니다.
             -- LPAD        : 문자 값을 오른쪽 정렬하고 빈 곳을 지정한 문자열로 채워줍니다.
             -- RPAD        : 문자 값을 왼쪽 정렬하고 빈 곳을 지정한 문자열로 채워줍니다.
             -- TRIM      : 문자열에서 접두어나 접미어 또는 두 가지 모두를 잘라줍니다.
             -- LTRIM/RTRIM : 반복적인 문자 제거에 사용합니다.
             -- REPLACE  : 문자를 대체하여 반환합니다.
             
    -- CONCAT
SELECT CONCAT(CONCAT(first_name,''), last_name) AS full_name,
        CONCAT(email,'@oracle.com') AS email
FROM employees;
    /*
    FULL_NAME         EMAIL
    -------------------------------------------------------------
    StevenKing           SKING@oracle.com
    NeenaKochhar     NKOCHHAR@oracle.com
    LexDe Haan         LDEHAAN@oracle.com
    ...
    */


    
    -- SUBSTR('지정 문자열', 시작 문자, 출력문자의 개수)
        -- 시작 문자를 음수로 지정하는 경우 문자열의 끝부터 위치합니다.
SELECT SUBSTR('oracle database', 1, 6), SUBSTR('oracle database', 8, 4), SUBSTR('oracle database', -8, 4)
FROM DUAL;
    /*
    SUBSTR('oracle ...', 1, 6)     SUBSTR('oracle...', 8, 4)     SUBSTR('oracle ...', -8, 4)
    ------------------------------------------------------------------------------------------------------------------
    oracle                                      data                                      data
    */


    
        -- 성의 첫 세자리 숫자를 출력
SELECT last_name, SUBSTR(last_name, 1, 3)
FROM employees;
    /*
    LAST_NAME       SUBSTR(LAST_NAME, 1, 3)
    ----------------------------------------------------------------
    King                     Kin
    Kochhar              Koc
    De Haan             De
    ...

    */


    
        -- 성이 A로 시작하는 사람
SELECT last_name
FROM employees
WHERE SUBSTR(last_name, 1, 1)='A'; 
    -- = WHERE last_name LIKE 'A%';
    /*
    LAST_NAME
    ----------------------
    Abel
    */



        -- 성이 s로 끝나는 사람
SELECT last_name
FROM employees
WHERE SUBSTR(last_name, -1, 1)='s';
    -- = WHERE last_name LIKE '%s';
    /*
    LAST_NAME
    ---------------------
    Mourgos
    Rajs
    Davies
    ...
    */



     -- LENGTH/LENGTHB  > 숫자가 반환됩니다.
SELECT LENGTH('oracle'), LENGTH('오라클'), LENGTHB('oracle'), LENGTHB('오라클')
FROM dual;
    /*
    LENGTH('oracle')  LENGTH('오라클')  LENGTHB('oracle')   LENGTHB('오라클')
    ---------------------------------------------------------------------------------------------------------------
            6                       3                                 6                           9
    */



        -- 성이 4자리 이하인 직원 정보
SELECT last_name
FROM employees
WHERE LENGTH(last_name)<=4;
    /*
    LAST_NAME
    ---------------
    King
    Rajs
    Abel
    Fay
    */



     -- INSTR 
        -- 네 개의 인수까지 가능합니다.
        -- INSTR('지정 문자열', 인수1)
            -- 지정 문자열에서 인수1이 위치한 자리 수를 반환합니다.
        -- INSTR('지정 문자열', 인수1, 시작 문자, 반복 횟수) 
            -- 지정 문자열에서 시작 문자의 위치부터 인수1이 반복 횟수번째 자리수를 반환합니다.
SELECT INSTR('oracle database', 'a'), INSTR('oracle database', 'a', 1, 3), INSTR('oracle database', 'j')
FROM dual;
    /*
    INSTR('oracle ...', 'a')    INSTR('oracle ...', 'a', 1, 3)   INSTR('oracle ...', 'j')
    ----------------------------------------------------------------------------------------------------------
                    3                                11                                       0
    */





        -- 성에 a문자가 들어가지 않는 직원 정보
SELECT last_name
FROM employees
WHERE INSTR(last_name, 'a')<>0;
    -- = WHERE lsat_name LIKE '%a%';
    /*
    LAST_NAME
    ----------------------
    Kochhar
    De Haan
    Rajs
    ...
    */


 
       -- 성에 a문자가 포함되는 직원 정보   
SELECT last_name
FROM employees
WHERE INSTR(last_name, 'a')=0;
    -- = WHERE last_name LIKE '%a%';
    /*
    LAST_NAME
    --------------------
    King
    Hunold
    Ernst
    ...
    */



     -- LPAD/RPAD  ('지정 문자열', 자리수, '빈칸을 채울 문자') 
        -- 자리수 만큼 오른쪽/왼쪽 정렬을 하며 빈 칸은 문자로 채워 반환합니다.
SELECT LPAD('oracle', 10, '*'), RPAD('oracle', 10, '*')
FROM dual;  
    /*
    LPAD('oracle', 10, '*')      RPAD('oracle', 10, '*')
    -------------------------------------------------------------------
    ****oracle                       oracle****
    */



SELECT RPAD(last_name, 15, '-'), LPAD(salary, 10, '*')
FROM employees;
    /*
    RPAD(last_name, 15, '-')    LPAD(salary, 10, '*')
    ------------------------------------------------------------------
    King-----------                       *****24000
    Kochhar--------                    *****17000
    De Haan--------                   *****17000
    ...

    */


    
     -- TRIM ('제거할 접두어/접미어' FROM '지정 문자열')
        -- 지정 문자열에서 맨 앞이나 맨 뒤의 문자를 제거합니다.
        -- 연속되는 문자를 모두 제거할 수는 있지만 두 개 이상의 문자를 제거할 수 없습니다.
SELECT TRIM('w' FROM 'window'), TRIM(LEADING 'w' FROM 'window'), TRIM(TRAILING 'w' FROM 'window')
FROM dual; 
    /*
    TRIM('w' FROM ' ')     TRIM(LEADING 'w' FROM ' ')     TRIM(TRAILING 'w' FROM ' ')
    -------------------------------------------------------------------------------------------------------------------
    indo                                indow                                             windo
    */




    -- LTRIM/RTRIM
        -- 여러 개의 문자가 연속으로 되지 않아도 제거합니다.
        -- 제거할 문자가 아닌 다른 문자가 있는 경우 제거를 중단하고 반환합니다.
        -- 함수를 중첩하여 양끝의 여러 문자를 동시에 제거할 수 있습니다.
SELECT LTRIM('01010012345670101', '01'), LTRIM('010170012345670101', '01'), RTRIM('01010012345670101', '01')
FROM dual;
    /*
    LTRIM('0101...', '01')    LTRIM('010170...', '01')   RTRIM('01010...', '01')
    ----------------------------------------------------------------------------------------------------------
        2345670101            70012345670101            0101001234567
    */


    
    -- REPLACE 
SELECT REPLACE('Jack and Jue', 'J', 'Bl') 
FROM dual;
    /*
    REPLACE('Jack and Jue', 'J', 'Bl') 
    ------------------------------------------------
            Black and Blue
    */

반응형