반응형
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
반응형
'DB' 카테고리의 다른 글
| [MySQL] 나머지와 정수 나눗셈 함수: MOD, DIV 실전 가이드 (0) | 2025.07.22 |
|---|---|
| [MySQL] 최대/최소/중간값: GREATEST, LEAST, INTERVAL 비교 (1) | 2025.07.21 |
| [MySQL] 숫자 절댓값과 부호 함수: ABS, SIGN 활용법 (1) | 2025.07.21 |
| [MySQL] 숫자 반올림 함수: ROUND, CEIL, FLOOR 완전 정리 (0) | 2025.07.21 |
| [MySQL] 문자열 인코딩과 포맷 함수: CHAR, ASCII, HEX 등 총정리 (0) | 2025.07.19 |
| [MySQL] 반복, 역순, 공백 함수: REPEAT, REVERSE, SPACE 정리 (1) | 2025.07.19 |
| [MySQL] 대소문자 변환 함수: UPPER, LOWER 실습 가이드 (0) | 2025.07.19 |
| [MySQL] 문자열 공백 제거 함수: TRIM, LTRIM, RTRIM 비교 (0) | 2025.07.19 |