sql >> Base de Datos >  >> RDS >> SQLite

3 formas de encontrar filas que contienen letras mayúsculas en SQLite

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