[Oracle] WHERE 절에서 LIKE 조건 패턴의 대소문자를 구분 없이 적용하는 법

DEV/Database

[Oracle] WHERE 절에서 LIKE 조건 패턴의 대소문자를 구분 없이 적용하는 법

BI3A 2024. 1. 18. 04:03

반응형

database
DB를 학습합시다.


 

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