본문 바로가기
DB/ORACLE,HANA

S/4HANA에서 문자·숫자만 남기기 REGEXP_REPLACE와 REPLACE_REGEXPR 함수 사용법

by ESTP 개발자 2025. 2. 5.

재작년 3월에 hana 관련 내가 적은 글 봐도 뭔 소린지... 이게 실무와 공부의 차이인가(아님)

 

 

문제 :

1. 알수없는 문자와 LF,CR 등이 문자열에 끼어 DB에 저장 되어 있음(내가 만든거 아님..)

2. where 절에 조건으로 넣으니 검색이 안됨

 

1차 해결 : REPLACE와 CHR(10), CHR(13)으로 간단하게 해결하기

SELECT *
  FROM TABLE_NAME
 WHERE REPLACE(COLUMN_NAME, CHR(10), '') 
  LIKE '%' || REPLACE(COLUMN_NAME, CHR(10) || CHR(13), '') || '%'

로 어느정도 해결 되는 듯 했으나 또 검색 조건에 안 걸림

 

2차 해결 : REGEXP_REPLACE()

극단적으로 숫자와 문자를 제외하고 모든 것 삭제하도록 쿼리 수정

챗지피티 이 뻥쟁이는 hana 함수에 없는걸 계속 있다고 함;;

그래서 무조건 hana에 있는거 맞아?  증거가져와 라고 다시 물어봐야 함..

SELECT REGEXP_REPLACE('ABC123!@#', '[^A-Za-z0-9]', '') AS cleaned_string 
  FROM DUMMY;

REGEXP_REPLACE 함수 사용하기!

정규 표현식 패턴과 일치하는 첫 번째 문자열을 두 번째로 지정된 문자열로 바꾸어 주어진 문자열을 반환합니다.

 

--syntax

regexp_replace ( string, regex, replacement )

 

-- example
regexp_replace('aaadogaaa', '[b-z]*', 'cat') returns 'aaacataaa'.
regexp_replace('aaadogaaa', '[b-z]*', '') returns 'aaaaaa'.
regexp_replace('aaa', '[a-z]*', 'dog') returns 'dog'.
regexp_replace('aaa', '[b-z]*', 'dog') returns 'aaa'.

 

-- usage

문자열에 POSIX 정규 표현식과 일치하는 것이 없으면 함수는 대체 문자열 없이 문자열을 반환합니다. 

regex가 유효한 정규 표현식이 아니면 함수는 NULL을 반환합니다.

-U 서버 옵션이 지정된 경우 이 함수는 UTF-8 문자열로 작동합니다.

 

 

참고자료 :: REGEXP_REPLACE

https://help.sap.com/docs/SAP_EVENT_STREAM_PROCESSOR/c0bfc07bfda94f66bae6b10c94725d82/e78f04fe6f0f1014b822bba9ec7bbd5b.html?locale=en-US&q=REGEXP_REPLACE

 

분명히 공식문서에도 있는게 dbeaver에선 그런 함수가 없대요... 대신 regexp_replace()함수는 있답니다...

 

3차 해결 :  REGEXP_REPLACE()

 

REPLACE_REGEXPR( <패턴> [ 플래그 < 플래그> ] 
 IN <정규식_주제_문자열>  
 [ WITH <바꾸기_문자열> ] 
 [ FROM <시작_위치> ] 
 [ 발생 <정규식_바꾸기_발생 > ])

-- 핵간단설명

REPLACE_REGEXPR( '패턴' IN 변경할 칼럼명 WITH '바꿀문자열')

REPLACE_REGEXPR( '패턴' IN 변경할 칼럼명 WITH '바꿀문자열')

 

끄읏 ^^..

--설명

정규 표현식 패턴에 대한 문자열을 검색하여 정규 표현식 패턴이 한 번 또는 모든 발생하는 부분을 대체 문자열로 바꾸어 문자열을 반환합니다. 다음 매개변수 중 하나라도 NULL이면 함수는 NULL을 반환합니다: <pattern> , <flag> , <regex subject_string> , <replacement_string> , <start_position> 또는 <regex_replace_occurrence> .

 

 

-- 어려운 예시

예제에서는 정규 표현식을 사용하여 날짜 형식을 2014-04-01값으로 바꿉니다. 01/04/2014:

SELECT REPLACE_REGEXPR('([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})' IN '2014-04-01' 
WITH '\3/\2/\1' OCCURRENCE ALL) "replace_regexpr" FROM DUMMY;

 

 

 

으아~ 드디어 해결 됐슴다....

 

 

참고자료 :: REGEXP_REPLACE

https://help.sap.com/docs/HANA_SERVICE_CF/7c78579ce9b14a669c1f3295b0d8ca16/dcf1045ce51d45119cfe8ba17cf9da4f.html