SQL에서 데이터를 처리하다 보면 문자열을 다루는 경우가 많다.
예를 들어 이름 합치기, 특정 문자열 추출, 문자 길이 확인, 일부 치환 등
다양한 문자열 처리를 해야 할 때가 있다.
이번 글에서는 실무에서 자주 사용하는 문자열 관련 SQL 함수들을 정리하고,
각 함수별 사용 예제를 함께 소개하려고 한다.
1) CONCAT - 문자열 결합
: 여러 개의 문자열을 하나로 합칠 때 사용하는 함수
SELECT CONCAT('홍', ' ', '길동') AS full_name
FROM dual;
-- 결과: full_name = 홍 길동
※ MySQL에서는 dual
없이도 실행 가능
2) SUBSTR - 문자열 자르기
: 문자열에서 원하는 위치의 일부만 추출할 때 사용
SELECT SUBSTR('20250617', 1, 4) AS year,
SUBSTR('20250617', 5, 2) AS month,
SUBSTR('20250617', 7, 2) AS day
FROM dual;
-- 결과:
-- year = 2025
-- month = 06
-- day = 17
3) INSTR - 특정 문자 위치 찾기
: 문자열 안에서 특정 문자가 처음 등장하는 위치를 찾을 때 사용
SELECT INSTR('hello world', 'o') AS pos,
INSTR('banana', 'na') AS second;
-- 결과:
-- pos = 5 (첫 번째 o의 위치)
-- second = 3 (na가 처음 나오는 위치)
※ PostgreSQL에서는 POSITION('na' IN 'banana')
방식 사용
4) LENGTH / CHAR_LENGTH - 문자열 길이
: 문자열의 길이를 확인할 때 사용 (문자 수 또는 바이트 수 기준)
SELECT LENGTH('hello') AS byte_len,
CHAR_LENGTH('hello') AS char_len
FROM dual;
-- 결과: 둘 다 5 (영문 기준)
-- 한글의 경우 (Oracle 기준)
SELECT LENGTH('가나다') AS byte_len,
LENGTHB('가나다') AS byte_bytes
FROM dual;
-- 결과:
-- byte_len = 3 (문자 수)
-- byte_bytes = 9 (UTF-8 3바이트 기준)
※ MySQL에선 CHAR_LENGTH
/ MSSQL은 LEN()
사용
5) REPLACE - 문자열 치환
: 문자열 내 특정 값을 다른 값으로 바꿀 때 사용
SELECT REPLACE('010-1234-5678', '-', '') AS phone
FROM dual;
-- 결과: phone = 01012345678
6) TRIM / LTRIM / RTRIM - 공백 제거
: 문자열 앞/뒤의 공백을 제거할 때 사용
SELECT TRIM(' hello ') AS trimmed,
LTRIM(' hello') AS left_trimmed,
RTRIM('hello ') AS right_trimmed
FROM dual;
-- 결과:
-- trimmed = 'hello'
-- left_trimmed = 'hello'
-- right_trimmed = 'hello'
7) UPPER / LOWER - 대소문자 변환
: 문자열을 대문자 또는 소문자로 변환할 때 사용
SELECT UPPER('sql') AS upper_text,
LOWER('SQL') AS lower_text
FROM dual;
-- 결과:
-- upper_text = SQL
-- lower_text = sql
💡 문자열 함수별 DBMS 지원 여부
아래 표는 주요 문자열 함수들이 데이터베이스 별로 지원하는지
여부에 대해 정리한 표이다.
함수명 | Oracle | MySQL | PostgreSQL | MSSQL | 비고 |
CONCAT | ⭕️ | ⭕️ | ⭕️ | ⭕️ | Oracle은 || 연산자도 사용 가능 |
SUBSTR | ⭕️ | ⭕️ | ⭕️ | ❌ | MSSQL은 SUBSTRING 사용 |
INSTR | ⭕️ | ⭕️ | ❌ | ❌ | PostgreSQL/MSSQL은 POSITION 또는 사용 |
LENGTH | ⭕️ | ⭕️ | ⭕️ | ❌ | MSSQL은 LEN() 사용 |
CHAR_LENGTH | ❌ | ⭕️ | ⭕️ | ❌ | Oracle/MSSQL 미지원 |
REPLACE | ⭕️ | ⭕️ | ⭕️ | ⭕️ | - |
TRIM | ⭕️ | ⭕️ | ⭕️ | ⭕️ | 모두 지원 |
LOWER / UPPER | ⭕️ | ⭕️ | ⭕️ | ⭕️ | 모두 지원 |
'DataBase > SQL' 카테고리의 다른 글
[SQL] 공백 제거 함수(TRIM, LTRIM, RTRIM) (0) | 2025.05.26 |
---|---|
[SQL] NULL 관련 SQL 함수(NVL, COALESCE, NULLIF) (0) | 2025.04.21 |
[SQL] 쿼리 결과가 없는 경우 0으로 반환하려면? (0) | 2025.03.14 |
[SQL] ORDER BY에 조건을 주려면? (0) | 2025.03.13 |