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