개발관련

Xml 노드 replace , xml node replace 출처: https://wooooseok.tistory.com/category/개발노트/jQuery [₩$tory]

개발자 워기 2019. 3. 10. 13:27

문제 > 개인정보법이 강화되면서 주민번호를 DB 쌓지 못하도록 되었습니다. 하지만 인터페이스할때는 필요합니다.

그래서 DB 쌓인 데이터를 배치로 당일 지워주기로 하였습니다.

처음엔 replace 하려했지만 TEST라는 노드가 여러 N개로 쌓이게 됩니다.

Replace 하면 앞에 주민번호만 변경됩니다



해결책

구글링하던 도중 김영대님께서 만드신 함수를 공유하여 변경하였습니다

함수를 등록 , 아래와같이 정규식을 사용하여 사용해주세요

update WS.TEST..TEST_TEST1

set TESTCONTEXT = dbo.GetRegExReplace(TESTCONTEXT ,'[0-9,-]</JUMINNUMBER>', '') 

업데이트를 해주시면 JUMINNUMBER 노드를 전부 리플레이스 해줍니다

 


USE TEST

GO

/****** Object:  UserDefinedFunction [dbo].[GetRegExReplace]   ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:                김영대 

-- Create date: 2016-05-12

-- Description:        RegEx Replace 역할 함수 

-- =============================================


ALTER FUNCTION [dbo].[GetRegExReplace]

(

@TargetText VarChar(MAX), -- 원본 문자열 값 

@Expression VarChar(80),-- 정규 식 형태 문자열    

@ReplaceValue VarChar(80)  -- 교체할 문자

)

RETURNS VARCHAR(MAX)

AS

BEGIN

DECLARE @ReturnValue VARCHAR(MAX) = @TargetText;


IF ISNULL(@ReturnValue,'') =  '' 


   RETURN @ReturnValue;


WHILE 1 =1 


BEGIN


  IF PATINDEX('%' + @Expression + '%' , @ReturnValue) = 0 


   BREAK;


  SET @ReturnValue = STUFF(@ReturnValue,PATINDEX('%' + @Expression + '%' , @ReturnValue),1,@ReplaceValue)


END 


   RETURN @ReturnValue

END