Oracle 데이터베이스에서 대소문자를 구분하지 않고 검색 수행
Oracle 데이터베이스의 비교 연산자(예: LIKE, = 등)는 기본적으로 대소문자를 구분합니다. 이는 대소문자를 구분하지 않고 데이터를 검색해야 하는 경우 어려울 수 있습니다. 이 문제를 해결하기 위해 Oracle은 전체 텍스트 인덱스에 의존하지 않고 대소문자를 구분하지 않고 검색을 수행할 수 있는 여러 가지 방법을 제공합니다.
방법 1: 대소문자 변환
UPPER() 또는 LOWER() 함수를 사용하여 모든 데이터가 동일한 대소문자를 갖도록 강제할 수 있습니다. 예:
<code class="language-sql">select * from my_table where upper(column_1) = upper('my_string');</code>
또는
<code class="language-sql">select * from my_table where lower(column_1) = lower('my_string');</code>
column_1
가 upper(column_1)
또는 lower(column_1)
에 각각 인덱싱되지 않은 경우 전체 테이블 스캔이 필요할 수 있습니다. 이를 방지하려면 함수 기반 인덱스를 생성하세요.
<code class="language-sql">create index my_index on my_table ( lower(column_1) );</code>
LIKE 연산자의 경우 검색 문자열 앞뒤에 %를 추가하세요.
<code class="language-sql">select * from my_table where lower(column_1) LIKE lower('my_string') || '%';</code>
방법 2: 정규식
Oracle 10g부터 도입된 REGEXP_LIKE() 함수는 'i' 일치 매개변수를 지정하여 대소문자를 구분하지 않는 검색을 제공합니다.
<code class="language-sql">select * from my_table where regexp_like(column_1, '^my_string$', 'i');</code>
이를 항등 연산자로 사용하려면 문자열의 시작과 끝을 지정합니다(^ 및 $ 사용).
<code class="language-sql">select * from my_table where regexp_like(column_1, '^my_string$', 'i');</code>
LIKE 등가 검색의 경우 ^ 및 $를 삭제하세요. 검색 문자열에는 정규식 엔진에 의해 다르게 해석되는 문자가 포함될 수 있습니다.
방법 3: 세션 수준 구성
NLS_SORT 매개변수는 = 및 LIKE를 포함하여 비교의 정렬 순서를 정의합니다. BINARY_CI로 설정하여 세션의 모든 쿼리에 대해 대소문자를 구분하지 않는 정렬을 활성화할 수 있습니다.
<code class="language-sql">alter session set nls_sort=BINARY_CI;</code>
언어 비교를 강제하기 위해 NLS_COMP를 LINGUISTIC으로 설정할 수도 있습니다.
<code class="language-sql">alter session set nls_comp=LINGUISTIC;</code>
성능 향상을 위해 언어 색인을 생성할 수 있습니다.
<code class="language-sql">create index my_linguistc_index on my_table (NLSSORT(column_1, 'NLS_SORT = BINARY_CI'));</code>
위 내용은 Oracle에서 대소문자를 구분하지 않고 검색을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!