programing

SQL(ORACLE)의 악센트를 무시하는 문자열 비교

closeapi 2023. 10. 23. 21:49
반응형

SQL(ORACLE)의 악센트를 무시하는 문자열 비교

악센트와 대문자를 무시하고 두 텍스트 값을 쉽게 비교할 수 있는 방법이 있는지 알고 싶습니다.오라클 데이터베이스로 작업하고 있습니다.이미 답을 찾아봤지만 솔직히 여기서 제안한 Accent와 LIKE와의 Oracle에서의 case insensitive collision은 이해가 되지 않습니다.제가 시도해봤는데 효과가 없었어요.기본적으로 제가 원하는 것은 '페페'와 '페페' 같은 텍스트 값과 비교해서 참을 답으로 얻는 것입니다.

LIKE 지시 없이 가능합니까?

감사해요!

Oracle Setup:

CREATE TABLE TABLE_NAME ( value ) AS
SELECT 'pepé' FROM DUAL;

-- Not necessary to create an index but it can speed things up.
CREATE INDEX value_without_accent_idx
  ON TABLE_NAME ( CONVERT( value, 'US7ASCII' ) );

쿼리:

SELECT *
FROM   table_name
WHERE  CONVERT( value, 'US7ASCII' ) = 'pepe';

출력:

VALUE
-----
pepé  

사용.nlssort다음과 같은 방식으로 작동합니다.

select * from <your_table> where utl_raw.cast_to_varchar2((nlssort(<inspected_column>, 'nls_sort=binary_ai'))) like 'pe%';

nssort 호출은 악센트 문자를 언어적 기반으로 변환하고 비교 시 경우를 무시합니다.

원본 출처는 본 기사입니다(12c에서 확인됨).

이 제품은 에 적합합니다.ÇPT-BR의 나머지 문자(포르투갈어 - 브라질):

SELECT CONVERT( 'ÃÕÑ ÁÉÍ Ç', 'SF7ASCII' ) FROM DUAL;
Result: **AON AEI C**

데이터베이스 버전을 확인합니다.

SELECT * FROM V$VERSION;
   Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    PL/SQL Release 11.2.0.1.0 - Production
    "CORE   11.2.0.1.0  Production"
    TNS for Linux: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production

이 스레드에서 다음 작업을 수행할 수 있습니다.

select * from your_table 
where upper(utl_raw.cast_to_varchar2((nlssort(your_column, 'nls_sort=binary_ai')))) like upper('%word%')

Oracle 12.2 이후로 collate 키워드는 case insensitive 검색의 경우 binary_ci, case insensitive 및 accent insensitive 모두의 경우 binary_ai와 함께 사용할 수 있습니다.이것도 좀 더 지수 친화적인 방법이지만, 지수와 관련된 정확한 내용은 잘 모릅니다.

이름이 = 'pepe' collate binary_ai인 사람들에게서 나이를 선택합니다.

매치온: 페페

출처 : https://blogs.oracle.com/sql/post/how-to-do-case-insensitive-and-accent-insensitive-search-in-oracle-database

다음 블로그와 같이 https://eduardolegatti.blogspot.com/2013/04/ignorando-caracteres-acentuados.html

@AJPerez 답변은 유효하지만 LIKE 연산자와 함께 사용하면 문제가 발생할 수 있습니다.@Just Cavin이 제안한 대로 쿼리 전에 실행: (10g R2 이후 버전)

ALTER 세션 세트 NLS_SORT='WEST_EUROPEAN_AI'; -- 악센트 무감수 ALT SESSION SET NLS_COMP='언어적'; -- 대소문자 무감수

언급URL : https://stackoverflow.com/questions/35689157/compare-strings-ignoring-accents-in-sql-oracle

반응형