sql >> Base de Datos >  >> RDS >> MariaDB

4 formas de encontrar filas que contienen letras mayúsculas en MariaDB

Aquí hay cuatro opciones para devolver filas que contienen caracteres en mayúsculas en MariaDB.

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 REGEXP operador para realizar una coincidencia de un patrón de expresión regular.

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

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

Resultado:

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

RLIKE es un sinónimo de REGEXP , para que podamos reemplazar REGEXP con RLIKE para obtener el mismo resultado:

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

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 BINARY LOWER(c1) <> BINARY 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, MariaDB realiza una búsqueda que no distingue entre mayúsculas y minúsculas, por lo que uso el BINARY operador para obtener una búsqueda que distinga entre mayúsculas y minúsculas.

Esto también se puede hacer así:

SELECT c1 FROM t1
WHERE BINARY(LOWER(c1)) <> BINARY(c1);

Opción 3: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 BINARY c1 REGEXP BINARY '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Resultado:

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

Esta vez se devuelven menos filas que en los ejemplos anteriores. Eso es porque no especifiqué caracteres como É y Ø , que se devolvieron en el ejemplo anterior. Nuestro resultado contiene É pero esa fila solo se devolvió porque también contiene otros caracteres en mayúscula que do partido.

Por lo tanto, deberá asegurarse de tener cubiertos todos los caracteres válidos si usa esta opción.

Opción 4:comparar con un rango de caracteres

Otra forma de hacerlo es especificar el rango de caracteres que queremos hacer coincidir:

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

Resultado:

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