MSSQL DB에서 전자결재, 출력물 등 조회쿼리 결과를 Mask를 적용하여 데이터를 연동하는 경우
아래와 같이 사용자 정의 함수(스칼라 함수)를 등록하여 조회 쿼리에 적용하면 쉽게 관리할 수 있습니다.
CREATE FUNCTION dbo._ufnMaskConv
(
@MaskFormat NVARCHAR(100),
@String NVARCHAR(100)
) RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @RltString NVARCHAR(10),
@Cnt INT,
@Rs NCHAR(1)
SELECT @RltString = ''
-- 공백 or Null 인경우 RETURN
IF ISNULL(@String, '') = ''
RETURN ISNULL(@String, '')
WHILE DATALENGTH(@MaskFormat) > 0
BEGIN
SELECT @Cnt = PATINDEX('%[^0-9,a-z,A-Z]%', @MaskFormat)
SELECT @Rs = SUBSTRING(@MaskFormat, @Cnt, 1)
SELECT @String = REPLACE(@String, @Rs, '')
SELECT @RltString = @RltString + CASE @Cnt WHEN 0 THEN @String
ELSE LEFT(@String, @Cnt - 1) + SUBSTRING(@MaskFormat, @Cnt, 1) END
IF @Cnt = 0 BREAK
SELECT @String = SUBSTRING(@String, @Cnt, DATALENGTH(@String) - @Cnt - 1)
SELECT @MaskFormat = SUBSTRING(@MaskFormat, @Cnt + 1, DATALENGTH(@MaskFormat) - @Cnt)
END
-- Return the result of the function
RETURN @RltString
END
-- 사용예제
-- 1.사업자번호
SELECT dbo._UfnMaskConv(999-99-99999, 1111111111)
-- 2. 주민등록번호
SELECT dbo._ufnMaskConv(999999-9999999, 9901012111111)
사용자 정의 함수는 SQL 버전에 제약이 없으므로 해당 로직을 사용하는 것이 좋은 방안이 될 수 있습니다.
읽어주셔서 감사합니다.
반응형
최근댓글