Por que alguns dos resultados da consulta SQL contendo certos alfabetos estão faltando?
Eu tenho a seguinte tabela

Quando executo a consulta a seguir, ele deveria ter mostrado todos os nomes de instrutores contendo 's', mas não mostra. A consulta que escrevi:
SQL> SELECT instructor_name
2 FROM instructor
3 WHERE instructor_name LIKE '%s%';
O resultado é:

Qual é o problema aqui? Balbir Silakar e Saurav Pangeni também não deveriam aparecer no resultado?
Respostas
's'
e 'S'
são duas coisas diferentes se sua coluna tiver um agrupamento que diferencia maiúsculas de minúsculas.
Infelizmente, a Oracle não fornece uma versão do like
(geralmente chamada ilike
em outros bancos de dados) que não diferencia maiúsculas de minúsculas .
Você poderia fazer:
where instructor_name like '%s%' or instructor_name like '%S%'
Ou:
where lower(instructor_name) like '%s%'
Ou você pode usar regexp_like()
; é necessário um terceiro argumento que pode ser usado para tornar a pesquisa insensível a maiúsculas e minúsculas.
where regexp_like(instructor_name, 's', 'i')
Eu não ficaria surpreso se a regex fosse a opção mais rápida das três.
Seu banco de dados (por padrão, eu acho) diferencia maiúsculas de minúsculas, portanto, o mecanismo de correspondência LIKE diferencia maiúsculas de minúsculas. Esses nomes contêm um S maiúsculo.
Aqui está uma pergunta e resposta sobre como tornar a pesquisa sem distinção entre maiúsculas e minúsculas. Execute uma consulta semelhante a maiúsculas e minúsculas em um banco de dados SQL Server que diferencia maiúsculas de minúsculas
Para verificação que não diferencia maiúsculas de minúsculas, use regexp_like
where regexp_like(instructor_name , 's', 'i');
Como outros mencionaram, s
(chr (115)) e S
(chr (83)) são duas coisas diferentes, e não há s
em 'Balbir Silakar' ou 'Saurav Pangeni'.
Do Oracle 12.2 você pode usar
where instructor_name collate binary_ci like '%s%';
Você também pode ignorar acentos com
where instructor_name collate binary_ai like '%s%';