Aquí hay tres opciones para devolver filas que contienen caracteres en minúsculas en SQLite.
Datos de muestra
Supongamos que tenemos una tabla con los siguientes datos:
.nullvalue null
SELECT c1 FROM t1;
Resultado:
c1 -------------- CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 null É É 123 é é 123 ø Ø
Podemos usar los siguientes métodos para devolver las filas que contienen letras minúsculas.
Opción 1:Comparar con UPPER()
Cadena
Podemos usar UPPER()
función para comparar el valor original con su equivalente en mayúsculas:
SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Resultado:
c1 -------------- Café café 1café eCafé James Bond 007
Usando el no igual a (<>
) operador (alternativamente, puede usar !=
en lugar de <>
si lo prefiere), solo devolvemos aquellas filas que son diferentes a sus equivalentes en mayúsculas. La razón por la que hacemos esto es porque, si un valor es igual a su equivalente en mayúsculas, para empezar ya estaba en mayúsculas (y no queremos devolverlo).
SQLite realiza una búsqueda que distingue entre mayúsculas y minúsculas, por lo que no necesitamos hacer nada más para obtener el resultado que deseamos.
Es posible que haya notado que el ejemplo anterior no devolvió los caracteres Unicode en minúsculas é
y ø
a menos que el valor también incluya una letra minúscula que no sea Unicode. SQLite no admite completamente los caracteres Unicode. Por ejemplo, UPPER()
y LOWER()
Las funciones solo proporcionan mapeo de casos para las 26 letras utilizadas en el idioma inglés. Por lo tanto, el ejemplo anterior no convirtió ningún carácter Unicode a su equivalente en mayúsculas.
Eche un vistazo a la extensión ICU de SQLite si necesita trabajar con caracteres Unicode.
Opción 2:Comparar con los caracteres reales
Otra opción es usar el REGEXP
operador con un patrón de expresión regular que incluye explícitamente cada carácter en minúscula que queremos hacer coincidir:
SELECT c1 FROM t1
WHERE c1 REGEXP '[abcdefghijklmnopqrstuvwxyz]';
Resultado:
c1 -------------- Café café 1café eCafé James Bond 007
Podemos incluir caracteres Unicode en nuestra lista si lo deseamos:
SELECT c1 FROM t1
WHERE c1 REGEXP '[éøabcdefghijklmnopqrstuvwxyz]';
Resultado:
c1 -------------- Café café 1café eCafé James Bond 007 é é 123 ø
Opción 3:Comparar con un rango de caracteres
Otra forma de hacerlo es especificar el rango de caracteres en minúsculas que queremos hacer coincidir:
SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';
Resultado:
c1 -------------- Café café 1café eCafé James Bond 007