MSSQL Replace (특수)문자 바꾸거나 제거하기

개요

MSSQL Replace 는 문자를 다른 문자로 바꿔주는 간단한 함수입니다. 다만 특수문자( char(13), 엔터키, 탭, 따옴표 등을 제거하고 싶은데, 잘 안되면 좀 답답해질 수 있습니다.

MSSQL Replace 기본구문

REPLACE ( string_expression , string_pattern , string_replacement )

간단한 예제

mssql replace 를 실행한 결과

ABC 에서 B 를 X 로 바꿔주는 가장 간단한 예제입니다.

특수문자 바꾸기 – 엔터키

DECLARE @A NVARCHAR(10)
SET @A = 'ABC
DEF'
SELECT @A AS [A]
	, REPLACE(REPLACE(@A, CHAR(10), ''), CHAR(13), '') AS [REPLACE_A]

숨어있는 특수문자는 대부분, CHAR(9) : 탭, CHAR(10):줄바꿈, CHAR(13) : 캐리지리턴 인데, 위와 같이 쿼리하면 모두 제거할 수 있습니다.

REPLACE 로 엔터키 없앤 결과

특수문자 바꾸기 – 작은 따옴표

DECLARE @A VARCHAR(100)
SET @A = 'ABC''DEF'
SELECT @A, REPLACE('ABC', '''', '')

작은따옴표가 들어가있으면 REPLACE 에서 작은따옴표 두 개를 이용해서 REPLACE 할 수 있습니다.

REPLACE 로 작은따옴표 없앤 결과

특수문자 바꾸기 – 큰 따옴표, 백틱

DECLARE @A VARCHAR(100)
SET @A = 'ABC"DEF'
SELECT @A, REPLACE('ABC', '"', '')

큰따옴표와 백틱은 일반 문자바꾸는 것과 동일하게 바꾸면 됩니다.

REPLACE 로 큰따옴표 없앤 결과

여러 개 바꾸기

여러 개를 바꾸려면 REPLACE 를 중첩으로 써야 합니다. 그런데, 그 여러 개가 두어개가 아니라 좀 많으면 귀찮고 복잡합니다. 이 경우 TRANSLATE 를 쓰면 되는데, 이 함수는 두번째와 세번째 인수의 길이가 같아야 해서, 여러 개를 한 번에 없앨 수는 없어서, ‘X’ 라는 문자로 한꺼번에 바꿔놓고, 그 위에 REPLACE 를 씌워서 한꺼번에 바꿔줍니다.

DECLARE @A VARCHAR(100)
SET @A = 'ABC"`D"`E"`F'
SELECT @A
	, TRANSLATE(@A, '"`', 'XX')
	, REPLACE(TRANSLATE(@A, '"`', 'XX'), 'X', '')
REPLACE 로 여러 개 바꾸기 결과

어떤 특수문자가 숨어있는 지 찾기

아래와 같은 코드를 실행해보면 ASCII 값이 나오는데, 이 값을 CHAR() 함수에 던져주면 숨어있는 문자들( CHAR(13) 등과 같은 ) 을 찾을 수 있습니다.
예제는 ABC 뒤에 탭을 한 번 치고, 엔터키를 친 후에 DEF 를 입력한 값입니다.


DECLARE @A NVARCHAR(100)
SET @A = 'ABC	
DEF'

DECLARE @I INT, @CNT INT, @K NVARCHAR(1)
SELECT @I = 1, @CNT = LEN(@A)

WHILE (@I <= @CNT )
BEGIN
	SELECT @K = SUBSTRING(@A, @I, 1)
	SELECT ASCII(@K), @K
	SET @I += 1

END
숨어있는 특수문자 찾기 결과

ASCII 코드 값이 65 부터 이어지다가 중간에 9, 13, 10 이 나옵니다. 이 값들을 REPLACE ( …. , CHAR(10), ”) 이런식으로 제거하면 됩니다.

MSSQL 문자열함수 26개 정리 바로가기
REPLACE MS 문서 링크
참고 : 제어문자 위키 링크

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다