MSSQL Trim 함수 사용법 ( 문자 및 공백제거 )

trim 실행 결과

개요

MSSQL Trim 함수는 공백 또는 지정된 문자를 제거하는 함수이다.
trim 함수는 2017 버전부터 사용가능하고 ( 그 이전버전에는 LTrim 과 RTrim 을 이용해서 한쪽의 공백만 제거 가능하고, 양쪽을 같이 제거하려면 SELECT LTRIM(RTRIM(‘abc’)) 이런식으로 중첩해서 사용해야 함 )
TRIM 함수 MS 문서 링크

MSSQL Trim 을 사용한 공백제거

TRIM ( [ characters FROM ] string )
LTRIM ( character_expression )
RTRIM ( character_expression )

예제

mssql TRIM 을 사용한 공백제거 예제

MSSQL Trim 을 사용한 문자 제거

구문

TRIM ( [ LEADING | TRAILING | BOTH ] [characters FROM ] string )
LTRIM ( character_expression , [ characters ] )
RTRIM ( character_expression , [ characters ] )

아래의 내용은 mssql 2017 버전부터 사용가능합니다. 그 이전버전에서는 ltrim 과 rtrim 을 이용해서 단순히 공백제거만 가능합니다. Leading, Trailing, Both 는 문자제거를 어느 방향에서 시작할 것인지를 의미함. ( 지정된 방향에서 시작해서 문자들을 제거해나가다 지정되지 않은 문자를 만나면 멈추기 때문에, 방향이 중요함. 멈추지 않고, 모든 문자를 제거하려면 Replace 나 Translate 를 사용해야 함 )

예제

trim 을 사용한 문자 제거 결과

첫 번째 줄에서는 123 을 제거하려는데, 지정되지 않은 ( 123 중 아무것도 아닌 ) A 를 만났기때문에, 하나도 제거를 못했고, 두 번째 줄에서는 1, 2, 3 에 해당하는 문자들을 제거해나가다 ‘-‘ 를 만나서 멈춘 결과임

MSSQL Trim 을 이용한 특수문자 제거

시작이나 끝에 있는 특수문자들은 TRIM 을 이용해서 제거할 수 있습니다. 만약 중간에 특수문자가 들어있다면 TRANSLATE 를 이용해야 합니다. 아래 예제는 스페이스 + 탭 + 엔터 + 쉬프트엔터 들이 들어있는 문자열에서 TRIM 을 이용해서 특수문자를 제거하는 예제입니다.

DECLARE @A NVARCHAR(100)
SET @A = '	
	
	쉬프트엔터	
	
	'

SELECT '[' + TRIM(CHAR(9) + CHAR(13) + CHAR(10) FROM @A) + ']'
특수문자 제거 예제

2017 이전 버전에서 문자제거하는 사용자정의 함수 예제

예제를 위해서 만들어본 함수입니다. 실무에서 쓰고있는게 아니라서 예상하지 못한 현상들이 나타날 수도 있는데, 어쨌든 기본적인 테스트 결과는 잘 동작하네요.

-- MSSQL Trim 대체용 사용자정의 함수
CREATE OR ALTER FUNCTION UF_TRIM
(
	@TARGET		NVARCHAR(1000)	-- 원본 문자열
	, @REM		NVARCHAR(100)	-- 지울 문자들
	, @DIR		NVARCHAR(10)	-- 방향 BOTH, LEADING, TRAILING
)
RETURNS NVARCHAR(1000)
AS
BEGIN
	DECLARE @I	INT
		, @LEN	INT
	IF( @TARGET IS NULL OR @REM IS NULL )
		SET @TARGET = NULL

	SELECT @I = 1
		, @LEN = LEN(@TARGET)

	IF ( @DIR IN ( 'LEADING', 'BOTH'))
	BEGIN
		WHILE ( @I <= @LEN)
		BEGIN
				IF @REM LIKE '%' + SUBSTRING(@TARGET, 1, 1) + '%'
					SET @TARGET = SUBSTRING(@TARGET, 2, 1000)
				ELSE 
					SET @I = @LEN
			SET @I += 1
		END
	END

	IF ( @DIR IN ( 'TRAILING', 'BOTH'))
	BEGIN
		SELECT @TARGET = REVERSE(@TARGET)
			, @I = 1
			, @LEN = LEN(@TARGET)
		WHILE ( @I <= @LEN)
		BEGIN
				IF @REM LIKE '%' + SUBSTRING(@TARGET, 1, 1) + '%'
					SET @TARGET = SUBSTRING(@TARGET, 2, 1000)
				ELSE 
					SET @I = @LEN
			SET @I += 1
		END
		SET @TARGET = REVERSE(@TARGET)
	END
	
	RETURN @TARGET
END
-- 실행문
SELECT DBO.UF_TRIM('ABC123 123ABC', 'ABBCD', 'BOTH')
MSSQL TRIM 대체함수 실행 결과

MSSQL 문자열함수 26개 정리 바로가기

Comments

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

답글 남기기

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