Meu fornecedor exige que o banco de dados do data warehouse faça distinção entre maiúsculas e minúsculas, mas preciso fazer consultas que não diferenciam maiúsculas de minúsculas.
Em um banco de dados com distinção entre maiúsculas e minúsculas, como você escreveria isso para não diferenciar maiúsculas de minúsculas?
Where Name like '%hospitalist%'
Você pode anexar um novo agrupamento à sua consulta selecionada para localizar maiúsculas ou minúsculas.
Apenas esteja ciente dos problemas de desempenho que isso pode apresentar. Você precisará varrer o índice clusterizado para ajustar/encontrar os valores ao realizar o agrupamento. A maneira como você está escrevendo a
LIKE
peça também torna a consulta não-sargável.Eu peguei o truque de agrupamento das aulas do Seminário SELECT de Kendra Little . Você pode encontrar informações adicionais de agrupamento de Ben Snaidero do MS SQL Tips.
MSDN em Agrupar.
Embora você possa usar uma função escalar como UPPER ou LOWER e possa agrupar novamente a coluna para que não seja mais sensível a maiúsculas e minúsculas, todas essas abordagens exigem que a conversão de dados seja feita em relação aos dados de base que nunca permitirão uma busca de índice. Você também está liderando seu LIKE com um curinga, então isso não é uma preocupação para você neste cenário de qualquer maneira, mas se você já quis pesquisar a parte esquerda de uma string de maneira eficiente E permitir o otimizador para buscar através de um índice, você pode especificar sua string com colchetes ([]) da seguinte forma:
Este exemplo ( link dbfiddle aqui ) faz um trabalho melhor ao mostrar o que quero dizer:
Tanto isso quanto a
COLLATE
resposta afetarão o desempenho, pois tornam a consulta não-SARGable , mas a maneira mais fácil de fazer isso (como Edgar sugeriu em um comentário) é:ou
eu preferiria converter ambos os lados das coisas para letras minúsculas ou maiúsculas. para que não tenhamos que nos preocupar com a diferenciação entre maiúsculas e minúsculas dos dados presentes dentro da tabela .
ou em java