60. SQL - 문자열 함수 1탄 - SUBSTRING, CONCAT, SUBSTRING_INDEX

Jason·2026년 2월 1일

SQL

목록 보기
43/47

SQL 내가 틀린 것들 #60 — SUBSTRING, CONCAT, SUBSTRING_INDEX 문자열 다루기


💡 문자열 함수 3총사!

함수역할
SUBSTRING문자열 일부 추출
CONCAT문자열 합치기
SUBSTRING_INDEX구분자 기준으로 자르기

1️⃣ SUBSTRING — 일부 추출

문법

SUBSTRING(문자열, 시작위치, 길이)

⚠️ SQL은 1부터 시작! (0 아님!)

예시

SUBSTRING('01012345678', 1, 7)'0101234'
SUBSTRING('19900315', 1, 4)'1990'
SUBSTRING('19900315', 5, 2)'03'
SUBSTRING('19900315', 7, 2)'15'

실전: 전화번호 마스킹

SELECT
  name,
  CONCAT(SUBSTRING(phone, 1, 7), '****') AS masked_phone
FROM users
namemasked_phone
김철수0101234****

2️⃣ CONCAT — 문자열 합치기

문법

CONCAT(문자열1, 문자열2, 문자열3, ...)

예시

CONCAT('Hello', ' ', 'World')'Hello World'
CONCAT('1990', '-', '03', '-', '15')'1990-03-15'

⚠️ 주의: CONCAT 안에서 별칭(AS) 못 씀!

-- ❌ 안 됨!
CONCAT(
  SUBSTRING(birth_date, 1, 4) AS year,
  '-',
  SUBSTRING(birth_date, 5, 2) AS month
) AS formatted_date

-- ✅ 별칭은 맨 마지막에 1개만!
CONCAT(
  SUBSTRING(birth_date, 1, 4),
  '-',
  SUBSTRING(birth_date, 5, 2),
  '-',
  SUBSTRING(birth_date, 7, 2)
) AS formatted_date

실전: 생년월일 포맷 변환

SELECT
  name,
  CONCAT(
    SUBSTRING(birth_date, 1, 4),
    '-',
    SUBSTRING(birth_date, 5, 2),
    '-',
    SUBSTRING(birth_date, 7, 2)
  ) AS formatted_date
FROM customers
nameformatted_date
김철수1990-03-15

3️⃣ SUBSTRING_INDEX — 구분자 기준 자르기

문법

SUBSTRING_INDEX(문자열, 구분자, N)

양수 = 앞에서부터, 음수 = 뒤에서부터!

예시: 이메일 'kim@gmail.com'

SUBSTRING_INDEX('kim@gmail.com', '@', 1)'kim'        -- @ 앞
SUBSTRING_INDEX('kim@gmail.com', '@', -1)'gmail.com'  -- @ 뒤

구분자가 여러 개일 때: 'a@b@c'

N의미결과
1첫 번째 @ 앞a
2두 번째 @ 앞까지 전부a@b
-1마지막 @ 뒤c
-2뒤에서 두 번째 @ 뒤부터 전부b@c

실전: 이메일 아이디 추출

SELECT
  email,
  SUBSTRING_INDEX(email, '@', 1) AS email_id
FROM members
emailemail_id
kim@gmail.comkim

⚠️ 내가 틀린 것들

실수정답
SUBSTRING(phone, 0, 7)SUBSTRING(phone, 1, 7) — 1부터!
CONCAT(..., ****)CONCAT(..., '**'**) — 따옴표!
CONCAT 안에 AS 별칭안에서 AS 못 씀! 밖에서 1개만!
SUBSTRING_INDEX(email, '@', 2)-1 써야 뒷부분!

📌 정리

하고 싶은 것함수
문자열 일부 추출SUBSTRING(문자열, 시작, 길이)
문자열 합치기CONCAT(a, b, c)
구분자로 앞부분SUBSTRING_INDEX(문자열, 구분자, 1)
구분자로 뒷부분SUBSTRING_INDEX(문자열, 구분자, -1)
시작 위치1부터!
문자열 값따옴표 필수!

문자열 = SUBSTRING + CONCAT + SUBSTRING_INDEX! 💪

profile
Data Analyst | Thoughts Become Things. 할 수 있다고 생각하면 할 수 있다. 할 수 없다고 생각하면 할 수 없다. | www.linkedin.com/in/명수-제-7ab843200

0개의 댓글