sql >> Base de Datos >  >> RDS >> PostgreSQL

4 formas de encontrar filas que contienen caracteres en mayúsculas en PostgreSQL

Aquí hay cuatro opciones para devolver filas que contienen letras mayúsculas en PostgreSQL.

Datos de muestra

Supongamos que tenemos una tabla con los siguientes datos:

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 una clase de caracteres POSIX

Podemos usar el ~ operador para realizar una coincidencia entre mayúsculas y minúsculas de un patrón de expresión regular. El patrón puede ser tan simple o complejo como queramos.

Una opción simple es comparar nuestra columna con el [:upper:] clase de carácter POSIX:

SELECT c1 FROM t1
WHERE c1 ~ '[[:upper:]]';

Resultado:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007
 É
 É 123
 Ø

Opción 2:Comparar con LOWER() Cadena

Otra opción es 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
 É
 É 123
 Ø

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).

De forma predeterminada, PostgreSQL realiza una coincidencia que distingue entre mayúsculas y minúsculas, por lo que no necesitamos especificar una intercalación que distinga entre mayúsculas y minúsculas para obtener el resultado que deseamos.

Opción 3:Comparar con los caracteres reales

Otra opción es usar el ~ 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 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Resultado:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007

En este caso, se devuelven menos filas que en los ejemplos anteriores. Esto se debe a que no especifiqué caracteres como É y Ø , que se devolvieron en esos ejemplos. Nuestro resultado contiene É pero esa fila solo se devolvió porque también contiene otros caracteres en mayúscula que do partido.

Por lo tanto, esta opción es más limitada que la anterior, pero le brinda más control sobre los caracteres que desea emparejar.

Opción 4:Comparar con un rango de caracteres

Alternativamente, podemos especificar el rango de caracteres que queremos hacer coincidir:

SELECT c1 FROM t1
WHERE c1 ~ '[A-Z]';

Resultado:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007