특정 알파벳이 포함 된 SQL 쿼리에 대한 일부 결과가 누락 된 이유는 무엇입니까?
다음 표가 있습니다.

다음 쿼리를 실행하면 's'가 포함 된 모든 강사 이름이 표시되어야하지만 그렇지 않습니다. 내가 작성한 쿼리 :
SQL> SELECT instructor_name
2 FROM instructor
3 WHERE instructor_name LIKE '%s%';
결과는 다음과 같습니다.

여기서 문제는 무엇입니까? Balbir Silakar와 Saurav Pangeni도 결과에 나타나야하지 않습니까?
답변
's'
그리고 'S'
당신의 열이 대소 문자를 구분 데이터 정렬이있는 경우 다른 두 가지입니다.
아아, Oracle은 대소 문자를 구분하지 않는 버전을 제공하지 않습니다 like
(일반적으로 ilike
다른 데이터베이스에서 호출 됨).
다음과 같이 할 수 있습니다.
where instructor_name like '%s%' or instructor_name like '%S%'
또는:
where lower(instructor_name) like '%s%'
또는 사용할 수 있습니다 regexp_like()
. 검색 대소 문자를 구분하지 않는 데 사용할 수있는 세 번째 인수를 사용합니다.
where regexp_like(instructor_name, 's', 'i')
정규식이 세 가지 중에서 가장 빠른 옵션이 될 것이라는 사실에 놀라지 않을 것입니다.
귀하의 데이터베이스 (기본적으로 생각합니다)는 대소 문자를 구분하므로 LIKE 일치 메커니즘은 대소 문자를 구분합니다. 이러한 이름에는 대문자 S가 포함됩니다.
검색에서 대소 문자를 구분하지 않는 방법에 대한 Q & A가 있습니다. 대소 문자를 구분하는 SQL Server 데이터베이스에서 대소 문자를 구분하지 않는 Like 쿼리 수행
대소 문자를 구분하지 않는 검사의 경우 regexp_like를 사용하십시오.
where regexp_like(instructor_name , 's', 'i');
다른 사람들이 언급했듯이 s
(chr (115))와 S
(chr (83))은 서로 다른 두 가지 s
이며 'Balbir Silakar'또는 'Saurav Pangeni'에는 없습니다.
Oracle 12.2에서 다음을 사용할 수 있습니다.
where instructor_name collate binary_ci like '%s%';
추가로 악센트를 무시할 수 있습니다.
where instructor_name collate binary_ai like '%s%';