개발/database

[mssql] 정규표현식 특정 문자 변경

가시죠 2021. 1. 17. 21:32
반응형

특정 문자를 * 처리 한다거나, 앞뒤 문자 첫글자만 * 처리를 하고 싶을 경우가 생긴다.

가령, 인사정보를 연동하는데 퇴직자의 경우 개인정보보호법에 따라 혹은 사내 보안규정에 의해 * 표시를 해야 하는 경우가 생기기 마련이다.

이때 미리 함수를 만들어 사용하면 쿼리부분만 변경하여 편하게 처리 할 수 있다.

GET_REGEX_REPLACE 함수

정규표현식으로 특정문자열을 교체 한다.

  • 사용법 : SELECT DBO.GET_REGEX_REPLACE(원본문자열, 정규표현식, 교체할 문자열)
  • 예시 : SELECT DBO.GET_REGEX_REPLACE('abcdAA@gmail.com', '[A-Za-z0-9]', '*')
CREATE OR ALTER FUNCTION GET_REGEX_REPLACE (
  @TARGET_TEXT NVARCHAR(MAX),
  @EXPRESSION NVARCHAR(80),
  @REPLACE_VAL NVARCHAR(80)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
  DECLARE @RETURN_VAL NVARCHAR(MAX) = @TARGET_TEXT;
  
  IF ISNULL(@RETURN_VAL, '') = ''
    RETURN @RETURN_VAL;
  WHILE 1=1
    BEGIN
      IF PATINDEX('%'+@EXPRESSION+'%', @RETURN_VAL) = 0
        BREAK;
      SET @RETURN_VAL = STUFF(@RETURN_VAL, PATINDEX('%'+@EXPRESSION+'%', @RETURN_VAL),1,@REPLACE_VAL)
    END
  RETURN @RETURN_VAL
END  

 

GET_NAME_REPLACE 함수

첫글자와 마지막 글자를 제외한 모든 글자를 변경한다.

  • 사용법 : SELECT DBO.GET_NAME_REPLACE(원본문자열, 변경할문자열)
  • 예시 : SELECT DBO.GET_NAME_REPLACE('홍길동', '*')
CREATE OR ALTER FUNCTION GET_NAME_REPLACE (
  @TARGET_TEXT NVARCHAR(MAX),
  @REPLACE_VAL NVARCHAR(10)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
  DECLARE @RETURN_VAL NVARCHAR(MAX) = @TARGET_TEXT;
  DECLARE @START_IDX NUMBER;
  DECLARE @END_IDX NUMBER;
  
  IF ISNULL(@RETURN_VAL, '') = ''
    RETURN @RETURN_VAL;
  SET @START_IDX = LEN(@TARGET_TEXT)-(LEN(@TARGET_TEXT)-2)
  SET @END_IDX = CASE WHEN LEN(@TARGET_TEXT) = 2 THEN 1 ELSE (LEN(@TARGET_TEXT)-2) END
  SET @RETURN_VAL = STUFF(@TARGET_TEXT, @START_IDX, @END_IDX, REPLICATE(@REPLACE_VAL, @END_IDX))
  
  RETURN @RETURN_VAL
END

 

 

반응형