DataBase/SQL

[SQL] 자주 쓰이는 문자열 함수 정리(CONCAT, SUBSTR, REPLACE, INSTR, LENGTH 등)

mingmongs 2025. 6. 24. 17:58

title

 

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 또는
CHARINDEX
사용
LENGTH ⭕️ ⭕️ ⭕️ MSSQL은 LEN() 사용
CHAR_LENGTH ⭕️ ⭕️ Oracle/MSSQL 미지원
REPLACE ⭕️ ⭕️ ⭕️ ⭕️ -
TRIM ⭕️ ⭕️ ⭕️ ⭕️ 모두 지원
LOWER / UPPER ⭕️ ⭕️ ⭕️ ⭕️ 모두 지원