programing

Oracle DB: 대소문자를 무시한 쿼리를 작성하려면 어떻게 해야 합니까?

codeshow 2023. 3. 13. 20:41
반응형

Oracle DB: 대소문자를 무시한 쿼리를 작성하려면 어떻게 해야 합니까?

제목에 기재한 바와 같이 Oracle DB에서 실행되는 SQL 쿼리는 다음과 같습니다.

SELECT * FROM TABLE WHERE TABLE.NAME Like 'IgNoReCaSe'

IGNORECASE, IGNORECASE, IGNORECASE 또는 이들 조합 중 하나를 쿼리에 반환하고 싶은데 어떻게 하면 좋을까요?

Select * from table where upper(table.name) like upper('IgNoreCaSe');

또는 위쪽 대신 아래쪽을 사용합니다.

대소문자를 구분하지 않는 비교를 설정하려면 ALTER SESSION 문을 사용합니다.

alter session set NLS_COMP=LINGUISTIC;
alter session set NLS_SORT=BINARY_CI;

버전 10gR2를 아직 사용하고 있는 경우는, 다음의 문장을 사용해 주세요.자세한 내용은 이 FAQ를 참조하십시오.

alter session set NLS_COMP=ANSI;
alter session set NLS_SORT=BINARY_CI;

where 조건의 양쪽에서 하위 또는 상위 함수를 사용할 수 있습니다.

정규 표현을 사용할 수도 있습니다.

SELECT * FROM TABLE WHERE REGEXP_LIKE (TABLE.NAME,'IgNoReCaSe','i');

쿼리에서 upper() 함수를 사용할 수 있으며 성능을 높이기 위해 함수 기반 인덱스를 사용할 수 있습니다.

 CREATE INDEX upper_index_name ON table(upper(name))

를 사용하여 두 값을 모두 대문자와 소문자로 변환할 수 있습니다.upper또는lower기능:

Select * from table where upper(table.name) like upper('IgNoreCaSe')

또는

Select * from table where lower(table.name) like lower('IgNoreCaSe');

버전 12.2 이후에서는 쿼리 대소문자를 구분하지 않는 가장 간단한 방법은 다음과 같습니다.

SELECT * FROM TABLE WHERE TABLE.NAME COLLATE BINARY_CI Like 'IgNoReCaSe'

...또한 쿼리 외부에서 상위 또는 하위로 변환합니다.

tableName:= UPPER(someValue || '%');

...

Select * from table where upper(table.name) like tableName 

또, 당연한 것도 잊지 말아 주세요.테이블의 데이터에는 케이스가 필요합니까?이미 소문자로 된 행을 삽입(또는 기존 DB 행을 소문자로 변환)하고 처음부터 바로 수행할 수 있습니다.

언급URL : https://stackoverflow.com/questions/1031844/oracle-db-how-can-i-write-query-ignoring-case

반응형