반응형
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
반응형
'programing' 카테고리의 다른 글
Java EE 및 Spring Boot에서 속성을 핫 새로고침하는 방법은 무엇입니까? (0) | 2023.03.13 |
---|---|
'routerLink'는 알려진 속성이 아니므로 바인딩할 수 없습니다. (0) | 2023.03.13 |
문자열의 JSON 배열을 어떻게 나타냅니까? (0) | 2023.03.13 |
jquery 프리펜드+페이드인 (0) | 2023.03.13 |
Woocommerce 3의 가변 제품 드롭다운에서 "옵션 선택"을 제거합니다. (0) | 2023.03.13 |