
개요
MySQL 쿼리를 작성하다보면 특정 문자가 포함된 조건을 걸어야할 때가 있습니다.
이때 주로 사용하는 연산자는 LIKE연산자입니다. 이 외에도 MySQL에서는 INSTR() 함수, REGEXP()를 제공합니다.
본 글에서는 INSTR() 함수에 대해서 정리하고자 합니다.
LIKE 연산자란❓
LIKE 연산자는 문자열 패턴 매칭에 사용됩니다. 예를 들어, 특정 문자열이 포함되어 있는지 확인하려면 % 와일드카드를 사용할 수 있습니다.
SELECT *
FROM FOOD_FACTORY
WHERE address LIKE '%강원도%';
위 쿼리는 address 컬럼에 "강원도"라는 문자열이 포함된 모든 행을 반환합니다. %는 어떤 문자열이든 0번 이상 일치하는 부분을 나타냅니다.
- %강원도% : "강원도"를 포함하는 모든 문자열
- 강원도% : "강원도"로 시작하는 모든 문자열
- %강원도 : "강원도"로 끝나는 모든 문자열
INSTR()함수란❓
INSTR() 함수는 특정 문자열이 다른 문자열 내에 존재하는지 확인하고, 존재하는 경우 해당 위치를 반환합니다. 존재하지 않으면 0을 반환합니다.
SELECT *
FROM FOOD_FACTORY
WHERE INSTR(address, '강원도') > 0;
위 쿼리는 address 컬럼에 "강원도"가 포함된 모든 행을 반환합니다.
INSTR() 함수는 "강원도"가 문자열 내에 존재하는 경우 그 위치를 반환하므로, > 0으로 검사하여 해당 문자열이 포함된 경우를 확인할 수 있습니다.
REGEXP 란❓
REGEXP는 정규 표현식을 사용하여 문자열에서 패턴을 찾는 데 사용됩니다.
LIKE와 비슷하지만, 더 복잡한 패턴 매칭이 가능합니다. 예를 들어, 숫자나 특정 형식의 문자열을 찾을 때 유용합니다.
- 장점: 복잡한 문자열 패턴을 매칭할 수 있습니다.
- 단점: 사용이 다소 복잡하고 성능이 떨어질 수 있습니다.
1. 특정 문자열로 시작하는 값 찾기
SELECT *
FROM FOOD_FACTORY
WHERE address REGEXP '^강원도.*';
위 쿼리는 address 컬럼이 "강원도"로 시작하는 데이터를 검색합니다.
2. 특정 문자열로 끝나는 값 찾기
SELECT *
FROM FOOD_FACTORY
WHERE address REGEXP '시$';
위 쿼리는 address 컬럼이 "시"로 끝나는 모든 데이터를 검색합니다. 예를 들어 "서울시", "부산시" 등 "시"로 끝나는 주소를 조회합니다.
3 특정 패턴을 포함하는 값 찾기
SELECT *
FROM FOOD_FACTORY
WHERE address REGEXP '서울|강원';
이 쿼리는 address 컬럼에 "서울" 또는 "강원"이 포함된 데이터를 검색합니다. 예를 들어 "서울특별시", "강원도 강릉시" 등 "서울" 또는 "강원"이 포함된 주소를 조회할 수 있습니다.
위의 예시들을 통해 REGEXP를 사용하여 다양한 패턴 매칭을 할 수 있다는 점을 알 수 있습니다.
SUBSTRING / SUBSTR 란❓
SUBSTRING (또는 SUBSTR)은 문자열의 일부분을 추출할 때 사용됩니다. 이 함수는 문자열에서 지정된 시작 위치와 길이에 해당하는 부분을 반환합니다.
- 장점: 문자열의 특정 부분을 쉽게 추출할 수 있습니다.
- 단점: 특정 위치부터 잘라낸 결과만 반환하기 때문에, 포함 여부를 확인하려면 추가적인 로직이 필요합니다.
SELECT *
FROM FOOD_FACTORY
WHERE SUBSTRING(address, 1, 2) = '강원';
위 쿼리는 address의 첫 2자리가 "강원"인 데이터만 반환합니다.
SELECT *
FROM FOOD_FACTORY
WHERE SUBSTRING(address, 3, 2) = '도';
이 쿼리는 address 컬럼의 3번째 문자부터 2자리가 "도"인 데이터를 검색합니다. 예를 들어 "강원도"에서 "도" 부분을 추출하여 비교할 수 있습니다.
'TIL,일일 회고' 카테고리의 다른 글
| [TIL, 일일 회고] 2025.02.18 - 리눅스 : chown 명령어 알아보기 : -h옵션과 심볼릭 링크의 관계 (0) | 2025.02.18 |
|---|---|
| [TIL, 일일 회고] 2025.02.17 - 심볼릭 링크(Symbolic Link)와 하드 링크(Hard Link) 알아보기 (0) | 2025.02.17 |
| [TIL, 일일 회고] 2025.02.15 - MySQL에서 OR 연산자 이외의 조건문 활용법: IN, CASE WHEN, FIND_IN_SET (1) | 2025.02.15 |
| [TIL, 일일 회고] 2025.02.14 - 리눅스 : umask 명령어란❓ (0) | 2025.02.14 |
| [TIL, 일일 회고] 2025.02.13 - 리눅스 파일 접근 권한 이해하기 (0) | 2025.02.13 |