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'이 포함된 기록을 검색합니다.
📌 주의할점
- FIND_IN_SET()은 쉼표로 구분된 문자열 데이터 를 대상으로 동작하므로,
표준화된 데이터베이스 설계 에서는 사용을 지양하는 것이 좋다. - 스트랩이 포함된 문자열에는 오작동 가능성이 있습니다.
→ 부품 'a ,b ,c'오류 'a'발생 가능성
→ 교체 필요 - 대체할 수 없습니다 → 성능을 발휘할 수 있는 것
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 |