반응형

LIKE 연산의 패턴은 대소문자를 구분한다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%el%'
ORDER BY 2 ASC;
위 코드는 이름에 'el'이라는 리터럴 값이 들어가는 모든 데이터를 뽑아내는 연산이다.
예상할 수 있는 기댓값 : elly, elizah, sellie 등등이 있다.
그러나 오라클의 Like 연산은 대소문자를 구분하기 때문에,
이름에 EL이나 eL, El과 같은 대소문자의 혼용이나, 대문자가 들어가는 패턴까지는 조회하지 못한다.
개선 1) 무식하게 OR 연산으로 적용하기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%el%' OR NAME LIKE '%EL%' OR NAME LIKE '%El%' OR NAME LIKE '%eL%'
ORDER BY 2 ASC;
무지성 OR 연산을 통해 해결하는 방법이다.
where에 el, EL, El, eL을 다 때려 넣는 방법이다.
그런데 리터럴 길이가 늘어나게 되면 적용해야 하는 조건이 2^리터럴 길이 배로 증가할 것이다.
3자리 수면 2^3 개만큼, 4자리 수면 2^4개만큼 대처해야 할 것이다.
이 방법은 너무 효율적이지 못하다.
개선 2) 우아하게 UPPER, LOWER 사용하기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE UPPER(NAME) LIKE '%EL%'
ORDER BY 2 ASC;
위 방법은 NAME의 값을 모두 대문자로 변환시킨 후 EL 패턴과 비교를 한다.
때문에, el, El, El과 같은 모든 패턴에 대소문자 구분 없이 대처가 가능하다.
만약 패턴을 %el%로 가져가고자 한다면 UPPER(NAME)을 LOWER(NAME)으로 소문자로 변환시키면 된다.
반응형
'DEV > Database' 카테고리의 다른 글
| [Oracle][CentOS7] Oracle XE DB 21c 설치 및 설정 (1) | 2024.09.19 |
|---|---|
| [ORACLE] DECODE 함수 (0) | 2024.06.07 |
| [ORACLE] CASE WHEN THEN (0) | 2024.01.29 |
| [MySQL] 기초 문법 정리 (2 / 2) (0) | 2023.11.01 |
| [MySQL] 기초 문법 정리 (1 / 2) (0) | 2023.10.31 |