[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
잘못된 내용이 있거나 더 나은 정보가 있다면 댓글로 남겨주세요.
감사합니다.
'DB, SQL' 카테고리의 다른 글
[MSSQL] 커스텀 함수 - 비숫자 제거 함수 (0) | 2024.09.06 |
---|---|
SQL Server XML 사용법 알아보자. (1) | 2023.12.19 |
[MSSQL] 커서(Cursor) 사용법 및 예제 (0) | 2023.01.02 |
MySQL 8.x 버전 root 비밀번호 까먹었을 때, 분실했을 때 해결방법 (1) | 2022.12.04 |
H2 Database 설치 및 실행, 오류 해결 (1) | 2022.10.09 |