본문 바로가기
DataBase

[MSSQL] SUBSTRING 함수 완벽 가이드 - 문자열 추출과 데이터 마스킹 활용법 총정리

by 대박플머 2024. 11. 2.

SUBSTRING 함수는 MSSQL에서 문자열이나 텍스트 데이터를 조작할 때 유용하게 사용되는 함수입니다. 이 글에서는 SUBSTRING 함수의 기본적인 사용법부터 다양한 활용 사례, 주의할 점 등을 다룰 것입니다.

1. SUBSTRING 함수란?

SUBSTRING 함수는 문자열에서 특정 부분을 잘라내어 반환하는 함수입니다. SUBSTRING 함수는 다음과 같은 형식으로 사용됩니다.

SUBSTRING(expression, start, length)
  • expression: 문자열이나 텍스트 데이터가 입력됩니다.
  • start: 추출을 시작할 위치로, 1부터 시작하는 인덱스입니다.
  • length: 추출할 문자 수입니다.

2. 기본 사용법

예제 1: 간단한 사용법

SELECT SUBSTRING('Hello World', 1, 5) AS Result;

위 쿼리에서는 'Hello World'라는 문자열에서 시작 위치 1에서부터 5개의 문자를 추출하여 반환합니다. 결과는 'Hello'입니다.

예제 2: 실제 컬럼에 적용하기

SELECT SUBSTRING(EmployeeName, 1, 3) AS FirstThreeChars
FROM Employees;

위 예제에서는 Employees 테이블의 EmployeeName 컬럼에서 첫 3개의 문자만 추출하여 FirstThreeChars라는 별칭으로 반환합니다.

3. 실전 활용 예제

(1) 전화번호 마스킹

고객 데이터에서 전화번호 일부를 마스킹해야 할 때 SUBSTRING을 활용할 수 있습니다.

SELECT
    SUBSTRING(PhoneNumber, 1, 3) + '****' + SUBSTRING(PhoneNumber, 8, 4) AS MaskedPhone
FROM Customers;

이 쿼리는 전화번호 중간 부분을 ****로 대체하여 개인정보 보호를 위한 마스킹을 수행합니다.

(2) 이메일 도메인 추출

이메일 주소에서 도메인 부분만 추출해야 하는 경우에도 SUBSTRING을 사용할 수 있습니다.

SELECT
    SUBSTRING(Email, CHARINDEX('@', Email) + 1, LEN(Email)) AS Domain
FROM Users;

여기서는 CHARINDEX 함수를 함께 사용하여 '@' 뒤의 문자열을 추출합니다.

4. 주의사항 및 팁

(1) startlength 값 주의

start 값이 1보다 작거나, length 값이 음수일 경우 오류가 발생합니다. 또한, start 값이 문자열 길이를 초과할 경우 빈 문자열을 반환합니다.

(2) 다국어 및 유니코드 처리

다국어 문자열을 다룰 때는 SUBSTRING이 문자 단위가 아닌 바이트 단위로 인식할 수 있습니다. 유니코드 데이터에서는 SUBSTRING 대신 NCHAR을 사용하는 것도 고려해야 합니다.

5. SUBSTRING과 다른 함수의 비교

LEFTRIGHT 함수와 유사하게 문자열을 추출할 수 있지만, SUBSTRING은 특정 위치에서 원하는 만큼의 길이를 지정할 수 있는 점에서 더 유연합니다.

예제 비교: LEFT, RIGHT, SUBSTRING

  • LEFT: 문자열 왼쪽에서 추출
  • SELECT LEFT('Hello World', 5) AS LeftResult; -- 결과: 'Hello'
  • RIGHT: 문자열 오른쪽에서 추출
  • SELECT RIGHT('Hello World', 5) AS RightResult; -- 결과: 'World'
  • SUBSTRING: 원하는 위치에서 원하는 길이만큼 추출
  • SELECT SUBSTRING('Hello World', 1, 5) AS SubstringResult; -- 결과: 'Hello'

6. 활용 예제

(1) 특정 구분자로 분리된 문자열 처리

콤마(,)로 구분된 데이터를 개별 요소로 분리할 때 SUBSTRINGCHARINDEX를 함께 사용하여 각 요소를 추출할 수 있습니다.

DECLARE @Text NVARCHAR(50) = 'Apple,Banana,Cherry';
SELECT
    SUBSTRING(@Text, 1, CHARINDEX(',', @Text) - 1) AS FirstItem,
    SUBSTRING(@Text, CHARINDEX(',', @Text) + 1, LEN(@Text) - CHARINDEX(',', @Text)) AS RemainingText;

위 쿼리는 첫 번째 콤마 위치를 기준으로 첫 번째 항목과 나머지 문자열을 나눕니다.

(2) 날짜 포맷팅

YYYY-MM-DD 형식의 날짜에서 년, 월, 일을 개별적으로 추출할 때 SUBSTRING을 활용할 수 있습니다.

DECLARE @Date NVARCHAR(10) = '2024-11-01';
SELECT
    SUBSTRING(@Date, 1, 4) AS Year,
    SUBSTRING(@Date, 6, 2) AS Month,
    SUBSTRING(@Date, 9, 2) AS Day;

결과적으로 각 부분을 별도로 추출하여 날짜 포맷을 변경하거나 계산에 활용할 수 있습니다.

7. 결론

SUBSTRING 함수는 MSSQL에서 문자열을 다룰 때 매우 유용한 함수로, 다양한 활용 가능성이 있습니다. 주어진 문자열에서 특정 부분을 추출하여 데이터 마스킹, 문자열 처리, 데이터 포맷팅 등 여러 시나리오에 활용할 수 있습니다. SUBSTRINGCHARINDEX, LEN 등의 함수와 조합하면 더 복잡한 문자열 조작 작업을 수행할 수 있습니다.