Você pode usar COLLATE NOCASE
em sua SELECT
consulta:
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
Além disso, no SQLite, você pode indicar que uma coluna não diferencia maiúsculas de minúsculas ao criar a tabela, especificando collate nocase
na definição da coluna (as outras opções são binary
(o padrão) e rtrim
; veja aqui ). Você também pode especificar collate nocase
quando criar um índice. Por exemplo:
criar tabela Teste
(
Text_Value texto agrupar nocase
);
insira nos valores de teste ('A');
insira nos valores de teste ('b');
inserir nos valores de teste ('C');
criar índice Test_Text_Value_Index
em teste (Text_Value agrupa nocase);
Expressões envolvendo Test.Text_Value
agora não diferenciam maiúsculas de minúsculas. Por exemplo:
sqlite> selecione Text_Value em Test, em que Text_Value = 'B';
Text_Value
----------------
b
sqlite> selecione Text_Value na ordem de teste por Text_Value;
Text_Value
----------------
UMA
b
C
sqlite> selecione Text_Value na ordem de teste por Text_Value desc;
Text_Value
----------------
C
b
UMA
O otimizador também pode potencialmente usar o índice para pesquisa e correspondência que não diferenciam maiúsculas de minúsculas na coluna. Você pode verificar isso usando o explain
comando SQL, por exemplo:
sqlite> explica selecione Text_Value em Test, em que Text_Value = 'b';
addr opcode p1 p2 p3
---------------- -------------- ---------- ---------- ---------------------------------
0 Saltar 0 16
1 Inteiro 0 0
2 OpenRead 1 3 keyinfo (1, NOCASE)
3 SetNumColumns 1 2
4 Cordas8 0 0 b
5 IsNull -1 14
6 MakeRecord 1 0 a
7 MemStore 0 0
8 MoveGe 1 14
9 MemLoad 0 0
10 IdxGE 1 14 +
11 Coluna 1 0
12 Retorno de chamada 1 0
13 Próximo 1 9
14 Fechar 1 0
15 Parada 0 0
16 Transação 0 0
17 VerifyCookie 0 4
18 Saltar 0 1
19 Noop 0 0
COLLATE NOCASE
que o índice não é necessário se o próprio campo já tem este agrupamento definido: " O padrão seqüência de agrupamento é a seqüência de intercalação definida para essa coluna na instrução CREATE TABLE. "COLLATE NOCASE
funcionará apenas com texto ASCII. Uma vez que você tenha "FIANCÉ" ou "voilà" nos valores da coluna, ele não corresponderá a "noivo" ou "VOILA". Depois de ativar a extensão da UTI,LIKE
torna-se sem distinção entre maiúsculas e minúsculas , então'FIANCÉ' LIKE 'fiancé'
é verdade, mas'VOILA' LIKE 'voilà'
ainda é falsa. E o ICU + LIKE tem a desvantagem de não usar o índice, por isso pode ser lento em grandes tabelas.select * from tbl where firstname='john' and lastname='doe' COLLATE NOCASE
será caso insensitivolastname
. Para ser insensível caso emfirstname
, escreva o seguinte:select * from tbl where firstname='john' COLLATE NOCASE and lastname='doe'
. É específico para essa coluna, não para awhere
cláusula inteira .fonte
Você pode fazer assim:
(Não é a solução, mas em alguns casos é muito conveniente)
fonte
Isso não é específico para o sqlite, mas você pode simplesmente fazer
fonte
Outra opção é criar seu próprio agrupamento personalizado. Você pode definir esse agrupamento na coluna ou adicioná-lo às suas cláusulas de seleção. Será usado para pedidos e comparações.
Isso pode ser usado para criar 'VOILA' LIKE 'voilà'.
http://www.sqlite.org/capi3ref.html#sqlite3_create_collation
fonte
Outra opção que pode ou não fazer sentido no seu caso, é realmente ter uma coluna separada com valores com a pontuação mais baixa da sua coluna existente. Isso pode ser preenchido usando a função SQLite
LOWER()
, e você pode executar a correspondência nessa coluna.Obviamente, ele adiciona redundância e um potencial de inconsistência, mas se seus dados são estáticos, pode ser uma opção adequada.
fonte
Simplesmente, você pode usar COLLATE NOCASE na sua consulta SELECT:
fonte
Se a coluna for do tipo
char
, você precisará anexar o valor que está consultando com espaços, consulte esta pergunta aqui . Isso além de usarCOLLATE NOCASE
ou uma das outras soluções (superior (), etc).fonte
você pode usar a consulta semelhante para comparar a respectiva string com os valores da tabela.
selecione o nome da coluna em nome_tabela onde o nome da coluna é como 'valor de comparação respectivo';
fonte
Está funcionando para mim Perfeitamente.
SELECT NAME FROM TABLE_NAME WHERE NAME = 'test Name' COLLATE NOCASE
fonte