proyectos ejemplos sqlite3 case-insensitive

ejemplos - ¿Cómo configurar Sqlite3 para que no se distinga entre mayúsculas y minúsculas cuando se compara una cadena?



django (10)

Quiero seleccionar registros de la base de datos sqlite3 por cadena de coincidencia. Pero si uso ''='' en la cláusula where, encontré que sqlite3 distingue entre mayúsculas y minúsculas. ¿Alguien puede decirme cómo usar cadenas que comparen entre mayúsculas y minúsculas?


Está funcionando para mí perfectamente. SELECT NAME FROM TABLE_NAME WHERE NAME = ''test Name'' COLLATE NOCASE


Esto no es específico de sqlite pero puedes hacerlo

SELECT * FROM ... WHERE UPPER(name) = UPPER(''someone'')


Otra opción es crear su propia colación personalizada. Luego puede establecer esa intercalación en la columna o agregarla a sus cláusulas de selección. Se utilizará para pedidos y comparaciones.

Esto se puede usar para hacer que ''VOILA'' LIKE ''voilà''.

http://www.sqlite.org/capi3ref.html#sqlite3_create_collation

La función de clasificación debe devolver un número entero que sea negativo, cero o positivo si la primera cadena es menor, igual o mayor que la segunda, respectivamente.


Otra opción que puede o no tener sentido en su caso, es tener realmente una columna separada con valores de puntuación baja de su columna existente. Esto se puede completar utilizando la función LOWER() , y luego puede realizar la coincidencia en esta columna.

Obviamente, agrega redundancia y un potencial de inconsistencia, pero si sus datos son estáticos, podría ser una opción adecuada.


Puedes hacerlo así:

SELECT * FROM ... WHERE name LIKE ''someone''

(No es la solución, pero en algunos casos es muy conveniente)

"El operador LIKE hace una comparación de coincidencia de patrón. El operando a la derecha contiene el patrón, el operando de la izquierda contiene la cadena que coincide con el patrón. Un símbolo de porcentaje ("% ") en el patrón coincide con cualquier secuencia de cero o más caracteres en la cadena. Un guión bajo ("_") en el patrón coincide con cualquier carácter individual de la cadena. Cualquier otro carácter coincide con sí mismo o con su equivalente en mayúsculas / minúsculas (es decir, una coincidencia que no distingue entre mayúsculas y minúsculas ) (Un error: SQLite solo entiende mayúsculas / minúsculas para caracteres ASCII. El operador LIKE distingue entre mayúsculas y minúsculas para caracteres Unicode que están más allá del rango ASCII. Por ejemplo, la expresión ''a'' LIKE ''A'' es VERDADERA pero ''æ'' LIKE ''Æ'' es FALSA.) . "


Si la columna es de tipo char entonces debe agregar el valor que está consultando con espacios, consulte esta pregunta here . Esto además de usar COLLATE NOCASE o una de las otras soluciones (upper (), etc.).


Simplemente, puede usar COLLATE NOCASE en su consulta SELECT:

SELECT * FROM ... WHERE name = ''someone'' COLLATE NOCASE


puede utilizar la consulta similar para comparar la cadena respectiva con valores de tabla.

seleccione el nombre de la columna de nombre_tabla donde el nombre de la columna es como ''valor de comparación respectivo'';


Puede usar COLLATE NOCASE en su consulta SELECT :

SELECT * FROM ... WHERE name = ''someone'' COLLATE NOCASE

Además, en SQLite, puede indicar que una columna no debe distinguirse entre mayúsculas y minúsculas cuando cree la tabla especificando collate nocase en la definición de la columna (las otras opciones son binary (la rtrim predeterminada) y rtrim ; consulte here ). También puede especificar el collate nocase al crear un índice. Por ejemplo:

create table Test ( Text_Value text collate nocase ); insert into Test values (''A''); insert into Test values (''b''); insert into Test values (''C''); create index Test_Text_Value_Index on Test (Text_Value collate nocase);

Las expresiones que involucran Test.Text_Value ahora deben ser sensibles a mayúsculas y minúsculas. Por ejemplo:

sqlite> select Text_Value from Test where Text_Value = ''B''; Text_Value ---------------- b sqlite> select Text_Value from Test order by Text_Value; Text_Value ---------------- A b C sqlite> select Text_Value from Test order by Text_Value desc; Text_Value ---------------- C b A

El optimizador también puede hacer uso del índice para búsquedas y coincidencias en la columna que no distinguen entre mayúsculas y minúsculas. Puede verificar esto usando el comando SQL explain , por ejemplo:

sqlite> explain select Text_Value from Test where Text_Value = ''b''; addr opcode p1 p2 p3 ---------------- -------------- ---------- ---------- --------------------------------- 0 Goto 0 16 1 Integer 0 0 2 OpenRead 1 3 keyinfo(1,NOCASE) 3 SetNumColumns 1 2 4 String8 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 Column 1 0 12 Callback 1 0 13 Next 1 9 14 Close 1 0 15 Halt 0 0 16 Transaction 0 0 17 VerifyCookie 0 4 18 Goto 0 1 19 Noop 0 0


SELECT * FROM ... WHERE name = ''someone'' COLLATE NOCASE