Na documentação sobre o operador LIKE , nada é dito sobre a distinção entre maiúsculas e minúsculas dele. É isso? Como habilitar / desabilitar?
Estou consultando varchar(n)
colunas, em uma instalação do Microsoft SQL Server 2005, se isso importa.
sql
sql-server-2005
varchar
sql-like
Marcel
fonte
fonte
LIKE
LIKE
Respostas:
Não é o operador que diferencia maiúsculas de minúsculas, é a própria coluna.
Quando uma instalação do SQL Server é executada, um agrupamento padrão é escolhido para a instância. A menos que seja explicitamente mencionado de outra forma (verifique a cláusula de agrupamento abaixo) quando um novo banco de dados é criado, ele herda o agrupamento da instância e quando uma nova coluna é criada, ela herda o agrupamento do banco de dados ao qual pertence.
Um agrupamento como
sql_latin1_general_cp1_ci_as
dita como o conteúdo da coluna deve ser tratado. CI significa sensível a maiúsculas e minúsculas e AS significa sensível a acentos.Uma lista completa de agrupamentos está disponível em https://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx
(a) Para verificar um agrupamento de instância
(b) Para verificar um agrupamento de banco de dados
(c) Para criar um banco de dados usando um agrupamento diferente
(d) Para criar uma coluna usando um agrupamento diferente
(e) Para modificar um agrupamento de coluna
É possível alterar uma instância e agrupamentos de banco de dados, mas isso não afeta os objetos criados anteriormente.
Também é possível alterar um agrupamento de coluna em tempo real para comparação de strings, mas isso é altamente não recomendado em um ambiente de produção porque é extremamente caro.
fonte
[A-Z]
sempre não faz distinção entre maiúsculas e minúsculas.[ABCDEFGHIJKLMNOPQRSŠTUVWXYZŽÅÄÖ]
no entanto, parece obedecer ao agrupamento.select COLLATION_NAME, iif(cast(COLLATIONPROPERTY(COLLATION_NAME, 'ComparisonStyle') as int) & 1 = 0, 'case sensitive', 'case insensitive') from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'exampletable' and COLUMN_NAME = 'examplecolumn'
Toda essa conversa sobre agrupamento parece um pouco complicada demais. Por que não usar algo como:
Então, seu cheque não diferencia maiúsculas de minúsculas, seja qual for o agrupamento
fonte
like 'a%'
poderia usar o índice e aupper
versão não.like
operador diferencia maiúsculas de minúsculas ou não .Latin1_General_CI_AS
, então fazerUPPER(@@VALUE) NOT LIKE '%SOMETHING%'
ou@@COLUMN NOT LIKE '%SOMETHING%'
é irrelevante: o resultado seria o mesmo.Você tem a opção de definir a ordem de agrupamento no momento de definir sua tabela. Se você definir um pedido com distinção entre maiúsculas e minúsculas, sua
LIKE
operadora se comportará de maneira sensível; se você definir uma ordem de agrupamento que não diferencia maiúsculas de minúsculas, oLIKE
operador também ignorará as maiúsculas e minúsculas:Aqui está uma demonstração rápida no sqlfiddle mostrando os resultados da ordem de agrupamento nas pesquisas com
LIKE
.fonte
Se você deseja realizar uma pesquisa com distinção entre maiúsculas e minúsculas sem alterar o agrupamento da coluna / banco de dados / servidor, você sempre pode usar a
COLLATE
cláusula, por exemploFunciona de outra maneira também, se sua coluna / banco de dados / servidor diferencia maiúsculas de minúsculas e você não deseja uma pesquisa com diferenciação de maiúsculas e minúsculas, por exemplo
fonte
WHERE bar COLLATE Latin1_General_CS_AS LIKE '[j-k]%'
lo retornaráJohn
como neste agrupamento a maiúsculaJ
está entre minúsculasj
e minúsculask
. É assimaAbBcC...jJkKlLmM...
que não é óbvio. PareceLatin1_General_BIN
mais previsível com buscas por intervalo com operador LIKE.O
like
operador usa duas strings. Essas strings devem ter agrupamentos compatíveis, o que é explicado aqui .Na minha opinião, as coisas ficam complicadas. A consulta a seguir retorna um erro dizendo que os agrupamentos são incompatíveis:
Em uma máquina aleatória aqui, o agrupamento padrão é
SQL_Latin1_General_CP1_CI_AS
. A consulta a seguir é bem-sucedida, mas não retorna nenhuma linha:Os valores "abc" e "ABC" não correspondem em um mundo com distinção entre maiúsculas e minúsculas.
Em outras palavras, há uma diferença entre não ter agrupamento e usar o agrupamento padrão. Quando um lado não tem agrupamento, é "atribuído" um agrupamento explícito do outro lado.
(Os resultados são os mesmos quando o agrupamento explícito está à esquerda.)
fonte
Tente correr,
Em seguida, descubra se o agrupamento diferencia maiúsculas de minúsculas ou não.
fonte
Você pode alterar a propriedade de cada item.
fonte
Você pode alterar facilmente o agrupamento no Microsoft SQL Server Management Studio.
fonte