반응형
특정 문자를 * 처리 한다거나, 앞뒤 문자 첫글자만 * 처리를 하고 싶을 경우가 생긴다.
가령, 인사정보를 연동하는데 퇴직자의 경우 개인정보보호법에 따라 혹은 사내 보안규정에 의해 * 표시를 해야 하는 경우가 생기기 마련이다.
이때 미리 함수를 만들어 사용하면 쿼리부분만 변경하여 편하게 처리 할 수 있다.
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
반응형
'개발 > database' 카테고리의 다른 글
[mssql] 암호화 복호화 함수 (3) | 2021.01.17 |
---|---|
[sqlite] SQLite 설치 / 간단사용법 (0) | 2021.01.17 |
[oracle] 오라클 테이블 목록, 컬럼 상세 조회 (0) | 2021.01.17 |
[oracle] 오라클 설치 후 사용자 계정 만들기/권한 부여 (0) | 2021.01.17 |
[oracle] 오라클 클라이언트 없이 DB 툴 사용하기 (oracle instance client 설치) (0) | 2021.01.17 |
댓글