MySQL에서 FIELD() 함수를 사용하면 테이블 열에 레코드로 저장된 문자열의 인덱스 위치를 손쉽게 확인할 수 있습니다. FIELD() 함수는 첫 번째 인자로 전달한 문자열이 이후에 나열된 값들 중 몇 번째에 해당하는지 그 위치(인덱스)를 숫자로 반환하며, 일치하는 값이 없으면 0을 반환합니다.
아래에서는 'websites'라는 테이블을 예제로 사용해 FIELD() 함수의 동작 방식을 살펴보겠습니다.
예제 테이블: websites
mysql> Select * from websites; +----+---------------+------------------------+ | Id | Purpose | Webaddress | +----+---------------+------------------------+ | 1 | For tutorials | www.tutorialspoint.com | | 2 | For searching | www.google.co.in | | 3 | For email | www.gmail.com | +----+---------------+------------------------+ 3 rows in set (0.00 sec)
'For email' 문자열의 인덱스 위치 찾기
이 테이블의 'Purpose'와 'Webaddress' 두 열에 저장된 값들 중에서 특정 문자열, 예를 들어 'For email'이 몇 번째 인덱스에 위치하는지 알고 싶다면 다음과 같은 쿼리를 실행하면 됩니다.
mysql> Select FIELD('For email', purpose, webaddress) From websites;
+----------------------------------------+
| FIELD('For email', purpose, webaddress)|
+----------------------------------------+
| 0 |
| 0 |
| 1 |
+----------------------------------------+
3 rows in set (0.00 sec)위 결과 집합을 보면 세 번째 행에서 값이 1로 반환되었습니다. 이는 'For email' 문자열이 세 번째 행의 첫 번째 인자 위치, 즉 'Purpose' 열에 저장되어 있음을 의미합니다. 나머지 두 행은 해당 문자열이 없으므로 0이 반환되었습니다.
'www.tutorialspoint.com' 문자열의 인덱스 위치 찾기
같은 방식으로 웹 주소 문자열의 위치도 확인할 수 있습니다.
mysql> Select FIELD('www.tutorialspoint.com', purpose, webaddress) From websites;
+------------------------------------------------------+
| FIELD('www.tutorialspoint.com', purpose, webaddress) |
+------------------------------------------------------+
| 2 |
| 0 |
| 0 |
+------------------------------------------------------+
3 rows in set (0.00 sec)위 결과에서 첫 번째 행의 값이 2로 반환되었습니다. 이는 'www.tutorialspoint.com' 문자열이 첫 번째 행의 두 번째 인자 위치, 즉 'Webaddress' 열에 저장되어 있다는 뜻입니다.
정리
FIELD() 함수는 검색 대상 문자열과 비교할 열들을 인자로 나열하기만 하면 되므로, 여러 열에 걸쳐 특정 값이 어느 위치에 존재하는지 빠르게 파악해야 할 때 매우 유용합니다. 단, 일치하는 값이 없으면 0을 반환한다는 점과, 대소문자를 구분하지 않고 비교한다는 점을 함께 기억해 두면 좋습니다.