개요
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 을 사용한 문자 제거
구문
TRIM ( [ LEADING | TRAILING | BOTH ] [characters FROM ] string )
LTRIM ( character_expression , [ characters ] )
RTRIM ( character_expression , [ characters ] )
아래의 내용은 mssql 2017 버전부터 사용가능합니다. 그 이전버전에서는 ltrim 과 rtrim 을 이용해서 단순히 공백제거만 가능합니다. Leading, Trailing, Both 는 문자제거를 어느 방향에서 시작할 것인지를 의미함. ( 지정된 방향에서 시작해서 문자들을 제거해나가다 지정되지 않은 문자를 만나면 멈추기 때문에, 방향이 중요함. 멈추지 않고, 모든 문자를 제거하려면 Replace 나 Translate 를 사용해야 함 )
예제

첫 번째 줄에서는 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')
