DB

[MySQL][SQL] FIND_IN_SET

오선지♬ 2025. 2. 24. 20:23
728x90
반응형

FIND_IN_SET()함수는 MySQL에서 사용되는 문자열 검색으로 함수, 특정 값이 쉼표(,)로 구분된 문자열 목록 안에 존재하는지 확인하는 데 사용됩니다.
이 함수는 주로 데이터베이스를 기준으로 하는 CSV(Comma-Separated Values) 형식으로 저장될 때 유용합니다.

 

📌 사용법

FIND_IN_SET(needle, haystack)
  • needle: 검색할 값 (찾고자 하는 단일 값)
  • haystack: 쉼표(,)로 구분된 문자열 목록

이 함수는 needle내 haystack에서 몇 번째 위치(index)에 있는지를 반환합니다.
그렇다면 needle이 haystack에 없으면 0, NULL이 외에는 NULL반환하겠습니다.

 

📌 실험

기본 사용

SELECT FIND_IN_SET('b', 'a,b,c,d');

결과: 2
('b'가 두 번째 위치에 대한 성능)

SELECT FIND_IN_SET('e', 'a,b,c,d');

결과: 0
('e'는 목록에 없음)

SELECT FIND_IN_SET('a', 'a,b,a,c');

결과: 1
(첫번째 'a'의 위치는 그대로)

 

WHERE 에서 활용

예: 특정 ID가 포함된 데이터 찾기

SELECT * FROM users WHERE FIND_IN_SET('3', user_roles);

user_roles포인터가 '1,2,3,4'형식으로 저장된 경우,
'3'이 포함된 기록을 검색합니다.

 

 

📌 주의할점

  1. FIND_IN_SET()은 쉼표로 구분된 문자열 데이터 를 대상으로 동작하므로,
    표준화된 데이터베이스 설계 에서는 사용을 지양하는 것이 좋다.
  2. 스트랩이 포함된 문자열에는 오작동 가능성이 있습니다.
    → 부품 'a ,b ,c'오류 'a'발생 가능성
    교체 필요
  3. 대체할 수 없습니다 → 성능을 발휘할 수 있는 것
    LIKE '%value%' 보다 낫지만, JOIN 또는 자격 있는 테이블 구조가 성능 더 유리합니다 .
728x90
반응형

'DB' 카테고리의 다른 글

[MySQL] JSON_CONTAINS  (0) 2025.02.25
[DB][Oracle] SUBSTR / SUBSTRING  (0) 2025.01.26
[DB][Oracle] FLOOR / TRUNC  (0) 2025.01.04
[DB][Oracle] ROW_NUMBER()  (0) 2025.01.03
[DB] GROUP_CONCAT  (0) 2024.12.14