DB/ORACLE

[ORACLE] μ •κ·œμ‹ (REGEXP) - REGEXP_REPLACE

λ°°κ³ νŒŒμš” 2023. 2. 28. 13:24
728x90

πŸ“    REGEXP_REPLACE   

  • μ •κ·œμ‹νŒ¨ν„΄μ— ν•΄λ‹Ήν•˜λŠ” λ¬Έμžμ— λŒ€ν•΄ λ³€ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜
  • REGXPP_REPALCE(source_char, patten
    [, replace_string
    [, position
    [, occurrence
    [, match_param]]]]
    )
    • souce
      원본 데이터λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 컬럼λͺ…μ΄λ‚˜ λ¬Έμžμ—΄μ΄ 올 수 있고 올 수 μžˆλŠ” 데이터 νƒ€μž…μ€ CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, NCLOB μž…λ‹ˆλ‹€.
    • patten
      찾고자 ν•˜λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 512λ°”μ΄νŠΈκΉŒμ§€ μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λ©° 데이터 νƒ€μž…μ€ CHAR, VARCHAR2, NCHAR, NVARCHAR2κ°€ 올 수 μžˆμŠ΅λ‹ˆλ‹€.
    • replace_string
      λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” ν˜•νƒœμž…λ‹ˆλ‹€. λ‘λ²ˆμ§Έ νŒ¨ν„΄μ— μΌμΉ˜ν•˜λŠ” 문자 λ˜λŠ” λ¬Έμžμ—΄μ„ μ°Ύμ•„μ„œ μ„Έλ²ˆμ§Έ λͺ¨μ–‘μœΌλ‘œ λ³€ν™˜ν•˜λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
    • position
      검색 μ‹œμž‘ μœ„μΉ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. μ•„λ¬΄λŸ° κ°’을 μ£Όμ§€ μ•Šμ„ κ²½μš° κΈ°λ³Έκ°’은 1μž…λ‹ˆλ‹€.
    • occurrence
      νŒ¨ν„΄κ³Ό μΌμΉ˜κ°€ λ°œμƒν•˜λŠ” νšŸμˆ˜λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 0은 λͺ¨λ“  κ°’을 λŒ€μ²΄ν•˜κ³  λ‹€λ₯Έ Nμ΄λΌλŠ” μˆ«μžλ₯Ό μ£Όλ©΄ N번째 λ°œμƒν•˜λŠ” λ¬Έμžμ—΄μ„ λŒ€μž…ν•©λ‹ˆλ‹€.
    • match_param
      κΈ°λ³Έκ°’μœΌλ‘œ κ²€μƒ‰λ˜λŠ” μ˜΅μ…˜μ„ λ°”κΏ€ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ„ΈλΆ€μ˜΅μ…˜μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
      c : λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•΄μ„œ κ²€μƒ‰ν•©λ‹ˆλ‹€.
      i : λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  κ²€μƒ‰ν•©λ‹ˆλ‹€.
      m : κ²€μƒ‰ μ‘°κ±΄μ„ μ—¬λŸ¬μ€„λ‘œ μ€„ μˆ˜ μž‡μŠ΅λ‹ˆλ‹€.

 

 


μ˜ˆμ‹œ

 

πŸ“ 아이디λ₯Ό λ³€κ²½ν•˜λŠ”λ°

  • μ•žμ€ 영문이고, λ’€λŠ” 2~4자리 이닀. 
  • 이 경우,  2,3자리의 μˆ«μžλ“€μ„ 4자리둜 λ³€κ²½ν•˜κ³  μ‹Άλ‹€.
  • λ³€κ²½ν•  λ•ŒλŠ”, μ•žμ— "0"으둜 μ±„μ›Œμ„œ λ³€κ²½ν•œλ‹€.
  • λ˜ν•œ, 이미 4자리의 숫자둜 μ΄λ€„μ Έμžˆλ‹€λ©΄, λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • EX) abcd12 --> abcd0012

 

 

 

 

 

 

 

SELECT B.*, B.ONLY_STR || B.USE_LPAD AS NEW_USER_NAME
FROM
(
    SELECT  USER_NAME
            , REGEXP_REPLACE(A.USER_NAME, '[0-9]') AS ONLY_STR
            , REGEXP_REPLACE(A.USER_NAME, '[^0-9]') AS ONLY_NUM
            , LPAD(REGEXP_REPLACE(A.USER_NAME, '[^0-9]'), 4, '0') AS USE_LPAD
    FROM 
    (
        SELECT USER_NAME FROM TB_TEST
    ) A    
) B ;






// +) μΆ”κ°€
SELECT B.*
       , B.ONLY_STR || B.USE_LPAD AS NEW_USER_NAME
       , SUBSTR(USER_NAME, 1, LENGTH(USER_NAME) - LENGTH(LAST_NUM)) || LPAD_LAST_NUM AS NEW_USER_NAME2
FROM
(
    SELECT  USER_NAME
            , REGEXP_REPLACE(A.USER_NAME, '[0-9]') AS ONLY_STR
            , REGEXP_REPLACE(A.USER_NAME, '[^0-9]') AS ONLY_NUM
            , LPAD(REGEXP_REPLACE(A.USER_NAME, '[^0-9]'), 4, '0') AS USE_LPAD
            , REGEXP_SUBSTR(A.USER_NAME, '[0-9]+$', 1, 1) AS LAST_NUM
            , LPAD(REGEXP_SUBSTR(A.USER_NAME, '[0-9]+$', 1, 1), 4 ,'0') AS LPAD_LAST_NUM
    FROM 
    (
        SELECT USER_NAME FROM TB_TEST
    ) A    
) B

 

 

 

 

   +) μΆ”κ°€   

 

πŸ“ μƒκ°ν•΄λ³΄λ‹ˆκΉŒ, λ§Œμ•½ 영문이 μ•„λ‹Œ 영문+숫자의 λ¬Έμžμ—΄ + 2~4의 숫자 둜 κ΅¬μ„±λ˜μ—ˆλ‹€λ©΄? 

  • κ·Έλž˜μ„œ λ‹€λ₯Έ 방법은 λͺ» μ°Ύκ² κ³ , μ΄λ ‡κ²Œ λ§Œλ“€μ–΄λ΄€μŒ.

 

 


좜처 : 

https://neocan.tistory.com/348

https://ms-record.tistory.com/101

 

 


개발 곡뢀λ₯Ό μœ„ν•œ λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€. 

였λ₯˜κ°€ μžˆλ‹€λ©΄ λŒ“κΈ€λ‘œ μ•Œλ €μ£Όμ„Έμš”! 

κ°μ‚¬ν•©λ‹ˆλ‹€.

728x90