DEV/Database

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

Bi3a 2024. 1. 18. 04:03

목차
반응형

database
DB를 학습합시다.


 

LIKE 연산의 패턴은 대소문자를 구분한다.

 

sql
닫기
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 연산으로 적용하기

 

sql
닫기
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 사용하기

 

sql
닫기
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