Aquí hay tres opciones para devolver filas que contienen caracteres en mayú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 mayúsculas.
Opción 1:comparar con LOWER() Cadena
Podemos usar LOWER() función para comparar el valor original con su equivalente en minúsculas:
SELECT c1 FROM t1
WHERE LOWER(c1) <> c1; Resultado:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 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 minúsculas. La razón por la que hacemos esto es porque, si un valor es igual a su equivalente en minúsculas, para empezar ya estaba en minú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 mayúsculas É y Ø a menos que el valor también incluya una letra mayúscula que no sea Unicode. SQLite no admite completamente los caracteres Unicode. Por ejemplo, LOWER() y UPPER() 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 minú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 mayúscula que queremos hacer coincidir:
SELECT c1 FROM t1
WHERE c1 REGEXP '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]'; Resultado:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007
Podemos incluir caracteres Unicode en nuestra lista si lo deseamos:
SELECT c1 FROM t1
WHERE c1 REGEXP '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]'; Resultado:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
Opción 3:comparar con un rango de caracteres
Otra forma de hacerlo es especificar el rango de caracteres en mayúscula que queremos hacer coincidir:
SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Z]'; Resultado:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007