[Oracle] 특정 문자열 포함 여부 확인 (LIKE, INSTR)
- 데이터베이스/오라클
- 2021. 7. 3.
오라클에서 특정 문자열의 포함 여부를 확인할 때 LIKE 연산자와 INSTR 함수를 사용한다. LIKE 연산자는 조건절(WHERE)에서 특정 문자열이 포함된 데이터를 찾을 때 사용하며, INSTR 함수는 특정 문자열이 포함된 위치를 반한 하므로 특정 문자열을 자를 때 많이 사용한다.
LIKE 연산자를 사용하여 문자열 포함 여부 확인
SELECT *
FROM emp
WHERE ename LIKE '%MI%'
LIKE 연산자는 조건절(WHERE)에서 컬럼에 특정 문자열이 포함되었는지 확인할 때 많이 사용한다.
문자열을 찾으면 true, 못찾으면 false를 반환한다.
CASE 표현식에 사용
SELECT empno
, ename
, CASE WHEN ename LIKE '%MI%' THEN 'Y'
ELSE 'N'
END AS "포함여부"
FROM emp
WHERE JOB = 'CLERK'
LIKE 연산자는 true, false를 반환하므로 CASE 표현식에 사용이 가능하다.
PL/SQL의 IF 문에서도 사용이 가능하다.
INSTR 함수를 사용하여 문자열 포함 여부 확인
SELECT *
FROM emp
WHERE INSTR(ename, 'MI') > 0
INSTR 함수는 특정 문자열을 찾은 위치를 정수형(숫자)으로 반환한다.
문자열을 찾으면 1이상, 못 찾으면 0을 반환한다.
조건절(WHERE)에서 문자열을 찾을 때 LIKE 연산자를 사용하는 것이 좋으며, INSTR 함수를 조건으로 사용해도 문제는 없으나 조건에 사용하는 컬럼이 인덱스 컬럼인 경우 속도에 영향이 있을 수 있으므로 확인 후 사용해야 한다.
CASE 표현식에 사용
SELECT empno
, ename
, INSTR(ename, 'MI')
, CASE WHEN INSTR(ename, 'MI') > 0 THEN 'Y'
ELSE 'N'
END AS "포함여부"
FROM emp
WHERE JOB = 'CLERK'
INSTR 함수는 문자열을 찾은 위치를 정수형으로 반환하므로 CASE 표현식 외에도 DECODE, SUBSTR 함수 등 조금 더 다양한 연산에 활용이 가능하다.
문자열 자르기
SELECT empno
, ename
, INSTR(ename, 'M')
, SUBSTR(ename, INSTR(ename, 'M'), 2)
FROM emp
WHERE JOB = 'CLERK'
INSTR 함수는 문자열을 자를때 많이 사용된다.
위의 예제는 성명(ename)에서 특정 문자("M")의 위치를 찾은 후 해당 위치에서 2자리의 문자를 자르는 방법이다.
LIKE 연산자와 INSTR 함수에 대해서 조금 더 자세히 알고 싶다면 아래의 포스팅을 읽어보면 된다.