Por padrão, o SQLite
LIKE
operador não diferencia maiúsculas de minúsculas para caracteres ASCII. Isso significa que ele corresponderá a caracteres maiúsculos e minúsculos, independentemente de qual maiúscula você usar em seu padrão. No entanto, existe uma técnica que você pode usar para fazer distinção entre maiúsculas e minúsculas.
SQLite tem uma instrução PRAGMA chamada case_sensitive_like , que é projetado especificamente para tornar o
LIKE
operador diferencia maiúsculas de minúsculas para caracteres ASCII. A razão pela qual eu especifico “caracteres ASCII” é porque, o
LIKE
O operador diferencia maiúsculas de minúsculas por padrão para caracteres unicode que estão além do intervalo ASCII. Portanto, se você precisar do
LIKE
operador para diferenciar maiúsculas de minúsculas no intervalo ASCII, o case_sensitive_like A declaração PRAGMA pode ser o que você está procurando. Isso também se aplica ao
like()
função, que funciona exatamente da mesma forma que a função LIKE
operador. Ativar/desativar a diferenciação entre maiúsculas e minúsculas
Você pode usar qualquer um dos seguintes valores booleanos para habilitar a diferenciação entre maiúsculas e minúsculas:
1
on
true
yes
Você pode usar qualquer um dos seguintes valores booleanos para desabilitar a diferenciação entre maiúsculas e minúsculas:
0
off
false
no
O argumento pode estar entre parênteses ou pode ser separado do nome do pragma por um sinal de igual.
Argumentos de palavra-chave podem, opcionalmente, aparecer entre aspas.
Exemplo sem distinção entre maiúsculas e minúsculas
Primeiro, vamos ver o que acontece quando não usamos o case_sensitive_like Declaração PRAGMA.
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Resultado:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
Nesse caso, a primeira coluna não diferencia maiúsculas de minúsculas – a maiúscula A corresponde à minúscula a .
E aqui está uma consulta em uma tabela de banco de dados.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultado:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
Nesse caso, temos uma partida contra todos os gatos cujos nomes começam com Br , embora nossos critérios tenham usado um b minúsculo .
Exemplo que diferencia maiúsculas de minúsculas
Agora vamos ver o que acontece quando usamos o case_sensitive_like Declaração PRAGMA para habilitar a diferenciação entre maiúsculas e minúsculas no intervalo ASCII.
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Resultado:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
Desta vez, o A maiúsculo não corresponda às letras minúsculas a .
E aqui está o exemplo de banco de dados depois de habilitar a diferenciação entre maiúsculas e minúsculas.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultado:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
Observe que não precisei executar a instrução PRAGMA novamente. A configuração permanece em vigor para minha conexão até que eu a altere.
Desativar distinção entre maiúsculas e minúsculas
Aqui está um exemplo de como desabilitar a diferenciação entre maiúsculas e minúsculas e executar a consulta novamente.
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultado:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
A função Like()
Conforme mencionado, o case_sensitive_like A instrução PRAGMA também afeta o
like()
função. PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
Resultado:
CatName like('Br%', CatName) like('br%', CatName) ---------- -------------------- -------------------- Brush 1 0 Brash 1 0 Broosh 1 0 100%Fluff 0 0 100$Fluff 0 0
Operador LIKE com reconhecimento de Unicode
Você também pode usar a extensão SQLite ICU se precisar de um
LIKE
com reconhecimento de unicode operador. A implementação de
LIKE
incluído nesta extensão usa a função ICU u_foldCase()
para fornecer comparações independentes de maiúsculas e minúsculas para todo o intervalo de caracteres unicode.