데이터베이스[DB]

[Oracle] 대소문자 구분 없이 검색하는 경우에 WHERE 조건

도로락 2020. 8. 10. 00:02
오라클 대소문자 구분 없이 검색하는 경우에 WHERE 조건
테이블의 문자열 컬럼을 대상으로 대소문자를 가리지 않고 검색을 해야할 때가 있습니다.

예를 들어 고객사의 이름이 대소문자를 구분하지 않고 저장되어 있는 경우 입니다.
SELECT * FROM CUSTOMERS;
cs

이 경우 사용자가 고객사의 이름을 대소문자를 구분하고 외우고 있지 않는 이상 = 연산자를 사용하거나 LIKE문을 사용하기가 어렵습니다. 만약 대소문자를 구분하여 알고 있다고 하더라도 편의적인 측면에서 매우 번거로울것입니다.




이 경우 두가지로 해결이 가능한데, WHERE절에 저장된 데이터와 검색할 문자열 모두 대문자 또는 소문자로 변경하여 비교하는 것입니다.
SELECT *
FROM CUSTOMERS
WHERE LOWER(NAME) = LOWER('INTL FCSTONE');
cs

사용자가 모든 문자열을 검색조건에 대문자로 입력했더라도 소문자로 변경하여 비교하므로 대소문자를 구분할 필요가 없습니다. 만약 LIKE문을 사용하는 경우 아래와 같이 사용할 수 있습니다.
SELECT *
FROM CUSTOMERS
WHERE LOWER(NAME) LIKE LOWER('%InTl%');
cs

UPPER를 사용하는것도 가능합니다.
SELECT *
FROM CUSTOMERS
WHERE UPPER(NAME) LIKE UPPER('%InTl%');
cs



당연하지만 모든 행의 NAME을 소문자로 변경하는 작업을 수행하므로 INDEX컬럼인 경우 INDEX 이용이 불가능하고 데이터가 매우 많은 경우 속도가 느릴 수 있습니다.