MySQL에서 제공하는 FIELD() 함수와 ELT() 함수는 동작 방식을 살펴보면 서로 정반대의 기능을 수행하면서도 상호 보완적인 관계에 있습니다. 하나는 문자열을 받아 위치를 알려주고, 다른 하나는 위치를 받아 문자열을 돌려주기 때문입니다.
두 함수의 역할 비교
FIELD() 함수는 문자열을 인수로 받으면, 해당 문자열이 문자열 목록에서 몇 번째 인덱스에 위치하는지를 반환합니다. 반면 ELT() 함수는 인덱스 번호를 인수로 받으면, 그 위치에 있는 문자열을 목록에서 찾아 반환합니다.
즉, FIELD()는 '문자열 → 인덱스' 방향으로 작동하고, ELT()는 '인덱스 → 문자열' 방향으로 작동합니다. 아래 예제에서 같은 문자열 목록에 두 함수를 각각 적용해 보면 이 개념을 명확하게 확인할 수 있습니다.
예제
mysql> SELECT ELT(4, 'Ram','is','good','boy') AS Result;
+--------+
| Result |
+--------+
| boy |
+--------+
1 row in set (0.00 sec)
mysql> SELECT FIELD('boy', 'Ram','is','good','boy') AS Result;
+--------+
| Result |
+--------+
| 4 |
+--------+
1 row in set (0.00 sec)위 결과 집합에서 볼 수 있듯이, 첫 번째 쿼리는 인덱스 번호(4)를 인수로 받아 문자열('boy')을 출력했고, 두 번째 쿼리는 문자열('boy')을 인수로 받아 인덱스 번호(4)를 출력했습니다. 입력과 출력이 정확히 뒤바뀌어 있기 때문에 두 함수는 서로의 보완재라고 할 수 있습니다.
실무 활용 팁
이러한 상호 보완 관계 덕분에 실무에서도 유용하게 활용할 수 있습니다. 특히 ORDER BY 절과 함께 FIELD()를 사용하면 알파벳순이나 숫자순이 아닌, 사용자가 지정한 임의의 순서대로 결과를 정렬할 수 있습니다. 또한 ELT()를 활용하면 숫자 코드를 미리 정의된 문자열 레이블로 변환하는 간단한 매핑 처리도 가능합니다.