DB, SQL

[MSSQL] 문자열 중 마지막에 들어간 특정한 문자 이후 문자열을 모두 제거하는 방법

isaac.kim 2024. 9. 19. 20:00
728x90
반응형

[MSSQL] 문자열 중 마지막에 들어간 특정한 문자 이후 문자열을 모두 제거하는 방법

 

다음과 같은 문자열이 있습니다.

10/20/30/40/50

 

"10/20/30/40/50"에서 만들고자 하는 결과 값은 "10/20/30/40"입니다.

 

문자열 중 마지막에 들어간 특정한 문자(/) 이후 문자열(/50)을 모두 제거하는 방법에 대해 알아보겠습니다.

 

MSSQL에 LEFT 함수를 사용해 문자열을 자르고 싶은 부분까지만 잘라내는 방법이 있습니다.

SELECT LEFT('10/20/30/40/50',11) as Result

 

이미 문자열의 길이를 알고 있는 상태에서는 LEFT 함수를 사용해서 결과를 쉽게 도출할 수 있습니다.

 

그런데 만약 가변적으로 다른 숫자들의 문자열이 주어진다면,

 

"1/2/3/4/5"와 같은 문자열이 주어진다면 LEFT 함수의 두 번째 인자로 부여한 값이 달라져야 합니다.

 

 

주어진 문자열의 길이가 달라질 수 있다고 했을 때 두 번째 인자로 부여한 값도 가변적으로 값을 얻어야 합니다.

 

주어진 문자열에서 마지막에 들어간 특정한 문자의 위치를 알아야 하고,

 

그 길이까지만 문자열을 자르면 됩니다.

 

그렇다면 가변적인 문자열에서 찾고자 하는 특정 마지막 문자를 찾는 코드를 작성해야 합니다.

 

마지막 특정 문자를 찾는 함수가 존재하는지 아직 확인은 못해봤지만,

 

마지막 특정 문자를 첫 번째 문자로서 찾는다고 하면 조금 더 접근이 쉬워집니다.

 

MSSQL에는 첫 번째 문자를 찾는 CHARINDEX 함수가 있습니다.

 

반응형

 

가변적으로 주어진 문자열을 뒤집어서 마지막 특정 문자를 첫 번째 문자로서 찾습니다.

 

MSSQL에는 문자열을 뒤집는 REVERSE 함수가 있습니다.

 

CHARINDEX 함수와 REVERSE 함수를 활용해서 마지막 특정 문자('/')의 위치를 찾습니다.

 

먼저 문자열 "1/2/3/4/5"에서 "/5"를 잘라낸 문자열과 문자열을 뒤집은 결과를 확인합니다.

DECLARE @var VARCHAR(50) = '1/2/3/4/5'
SELECT LEFT(@var, 7) as r1, REVERSE(@var) as r2

 

뒤집은 문자열("5/4/3/2/1")에서 첫 번째 특정 문자('/')를 찾습니다.

 

DECLARE @var VARCHAR(50) = '1/2/3/4/5'
SELECT CHARINDEX('/',REVERSE(@var)) as r3

 

그다음은 원래 주어진 문자열("1/2/3/4/5")에서 마지막 특정 문자('/') 이후 문자열("/5")을 모두 제거합니다.

 

원래 주어진 문자열의 길이(9)에서,

 

뒤집은 문자열에서 찾은 첫 번째 특정 문자('/')의 위치 길이(2)를 빼줍니다.

 

9 - 2 = 7

 

문자열의 전체 길이에서 찾은 마지막 특정 문자 길이를 빼면,

 

전체 문자열에서 마지막 특정 문자 길이를 빼주게 되는 것입니다.

 

그러면 글의 제목

 

"문자열 중 마지막에 들어간 특정한 문자 이후 문자열을 모두 제거하는 방법"

 

과 같은 결과를 얻을 수 있습니다.

 

 

코드는 다음과 같습니다.

DECLARE @var VARCHAR(50) = '1/2/3/4/5'
SELECT LEFT(@var, 7) as r1, REVERSE(@var) as r2
	, CHARINDEX('/',REVERSE(@var)) as r3
	, LEN(@var) - CHARINDEX('/',REVERSE(@var)) as r4
	, LEFT(@var, LEN(@var) - CHARINDEX('/',REVERSE(@var))) as r5

 


잘못된 내용이 있거나 더 나은 정보가 있다면 댓글로 남겨주세요.

감사합니다.

728x90
반응형