DB

[MySQL] 고급 문자열 함수: FIELD, ELT, FIND_IN_SET 정리

인생아 2025. 7. 19. 20:03
반응형

FIELD, ELT, FIND_IN_SET는 단순한 문자열 출력이 아닌, 조건에 따라 값을 추출하거나 위치를 찾는 데 특화된 함수다. 특히 CSV처럼 쉼표로 구분된 값에서 위치를 찾아내야 할 때 유용하다.

🔹 FIELD(str, val1, val2, ...): 값의 위치 찾기

문법

FIELD(찾을값, 비교값1, 비교값2, ...)

주어진 값들 중에서 str이 몇 번째 위치에 있는지를 숫자로 반환한다. 일치하는 값이 없으면 0을 반환한다.

예제

SELECT FIELD('B', 'A', 'B', 'C');   -- 결과: 2
SELECT FIELD('D', 'A', 'B', 'C');   -- 결과: 0

실무 활용

-- 우선순위 정렬용
SELECT *
FROM tasks
ORDER BY FIELD(priority, 'High', 'Medium', 'Low');
반응형

🔸 ELT(n, str1, str2, ...): 위치로 값 반환

문법

ELT(인덱스번호, 값1, 값2, ...)

n번째 값을 문자열로 반환한다. n이 유효 범위 밖이면 NULL을 반환한다.

예제

SELECT ELT(2, 'Red', 'Green', 'Blue');   -- 결과: 'Green'
SELECT ELT(5, 'A', 'B', 'C');            -- 결과: NULL

실무 활용

-- 숫자 상태코드를 텍스트 상태로 변환
SELECT ELT(status_code, '대기', '진행중', '완료') AS status_str
FROM process_table;

🔸 FIND_IN_SET(str, str_list): 쉼표 구분 문자열에서 위치 찾기

문법

FIND_IN_SET(찾을값, '값1,값2,값3')

CSV처럼 쉼표로 구분된 문자열에서 str이 몇 번째 위치에 있는지 반환한다. 일치하는 값이 없으면 0.

예제

SELECT FIND_IN_SET('B', 'A,B,C');     -- 결과: 2
SELECT FIND_IN_SET('D', 'A,B,C');     -- 결과: 0

실무 활용

-- 다중 태그 검색용
SELECT *
FROM posts
WHERE FIND_IN_SET('JavaScript', tags) > 0;
-- 우선순위 정렬
SELECT *
FROM orders
ORDER BY FIND_IN_SET(status, '긴급,일반,지연');
반응형

🧠 함수 비교 요약

함수명 역할 특징
FIELD 값의 위치 반환 숫자 반환, 우선순위 지정에 유리
ELT 위치로 값 반환 상태 코드 등 매핑에 유리
FIND_IN_SET 쉼표 문자열에서 위치 반환 CSV 필드, 태그 검색에 매우 유용

⚠️ 실무 팁 & 주의사항

  • FIND_IN_SET은 쉼표 구분자 필드에만 유효하다. 공백이 끼어 있으면 정확한 매칭이 안 됨.
  • FIND_IN_SET('B', 'A, B, C')처럼 공백이 포함되면 결과는 0
  • FIELD는 인자 수가 많을수록 성능에 영향 줄 수 있음
  • ELT는 1부터 시작하는 인덱스를 사용한다 (0부터 아님)

💡 실전 조합 예시

FIELD + ELT 조합

-- 숫자 코드 기반으로 설명 텍스트 매핑
SELECT ELT(FIELD(status, 'N', 'Y', 'C'), '신규', '진행', '완료')
FROM orders;

FIND_IN_SET 정렬

-- 사용자 등급 기준 정렬
SELECT *
FROM members
ORDER BY FIND_IN_SET(level, 'VIP,Gold,Silver,Bronze');

🔗 참고 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

 

반응형