문자에 포함된 %, _ 찾기

데이터에서 '%'나 '_'가 포함되어 있는 경우 어떻게 찾으면 될까요? LIKE문에서 '%'와 '_'는  와일드 카드로 사용되어 일반적인 방법으로는 해당 문자열의 포함여부를 찾으실수 없습니다. 이때에는 ESCAPE절을 사용하시면 됩니다. 문자열에서 '0_0'로 시작하는 데이터를 찾으려면 아래와 같이 SQL문을 작성하시면 됩니다.

SELECT *
FROM SAMPLE_TABLE
WHERE SAMPLE_COLUMN LIKE '0\_0%' ESCAPE '\';

 

'\'는 '\'문자 바로 뒤에 있는 '_'를 와일드 카드가 아닌 문자로 인식하라는 의미입니다. 이스케이프 문자 '\'는 ESCAPE절에서 지정할 수 있습니다. '\'이외에 다른 문자도 지정하여 사용 할 수 있습니다.

 

 

LIKE 연산자

LIKE 연산자는 특정한 내용을 포함 하고 있는 데이터 값을 조회하고 싶을때 사용하실수 있습니다.
예를 들어 이름(ENAME)이 알파벳 'A'로 시작하는 사원 데이터를 출력 하고 싶은 경우 아래와 같이 조회 하시면 됩니다. 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

SELECT *
FROM EMP
WHERE ENAME LIKE 'A%'; 

조건문에 'A%'는 알파벳 'A'로 시작하는 모든 것 이라는 뜻을 담고 있습니다. 이때 사용 하는 '%' 기호를 와일드 카드(wild card)라고 합니다. 와일드 카드는 특정 문자 또는 문자열을 대체하거나, 문자열 데이터의 패턴을 표시하는 특수문자로 LIKE문에서 사용하는 와일드 카드로는 '%' 이외에 '_'가 있습니다. 

  • '_' :   어떤 값이든 상관없이 한 개의 문자열 데이터를 의미
  • '%'  : 길이와 상관없이 모든 물자열 데이터를 의미

두개의 와일드 카드를 모두 이용해서 데이터를 찾을 수도 있습니다. 예를 들어 이름(ENAME)의 두번째 알파벳이 'A'인 사원 데이터를 출력 하고 싶은 경우 아래와 같이 조회 하시면 됩니다.

SELECT *
FROM EMP
WHERE ENAME LIKE '_A%';

이와 같이 와일드 카드를 이용하면, 자료의 일부만 알아도 해당 자료를 조회 하실 수 있습니다.

 

이번에는 이름(ENAME)의 알파벳이 'A'인 사원 데이터를 출력 하고 싶은 경우 어떻게 하면 될까요? 와이들 카드 '%'를 앞, 뒤 두번 사용하여 아래와 같이 조회 하시면 됩니다.

SELECT *
FROM EMP
WHERE ENAME LIKE '%A%';

 

 

+ Recent posts