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

Devolver solo valores numéricos en MariaDB

Los siguientes ejemplos de MariaDB devuelven solo aquellas filas que tienen valores numéricos en una columna dada.

Estos ejemplos usan REGEXP función para devolver valores que coincidan con el patrón especificado.

Datos de muestra

Supongamos que creamos una tabla como esta:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
    c1 varchar(255)
);

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('1'),
    ('+1'),
    ('-1'),
    ('00.00'),
    ('73.45'),
    ('+73.45'),
    ('-73.45'),
    ('.246'),
    ('-.34e7'),
    ('12.e-3'),
    ('1.2e+4'),
    ('a'),
    ('9afc'),
    ('e7'),
    ('+e0'),
    ('Ten'),
    ('5 Dollars');

SELECT * FROM t1;

La tabla ahora se ha creado y contiene los siguientes datos:

+-----------+
| c1        |
+-----------+
| 0         |
| 1         |
| +1        |
| -1        |
| 00.00     |
| 73.45     |
| +73.45    |
| -73.45    |
| .246      |
| -.34e7    |
| 12.e-3    |
| 1.2e+4    |
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

La columna es un varchar(255) columna, por lo que no es numérico. Puede (y contiene) números, pero estos se almacenan como datos de caracteres. También puede contener texto arbitrario (y lo hace).

Devolver todos los valores numéricos

Podemos usar la siguiente consulta para devolver todos los valores numéricos de la tabla anterior:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

Resultado:

+--------+
| c1     |
+--------+
| 0      |
| 1      |
| +1     |
| -1     |
| 00.00  |
| 73.45  |
| +73.45 |
| -73.45 |
| .246   |
| -.34e7 |
| 1.2e+4 |
| e7     |
| +e0    |
+--------+

Devolver enteros

Si solo queremos devolver números enteros, la consulta puede ser mucho más simple:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[0-9]+$';

Resultado:

+------+
| c1   |
+------+
| 0    |
| 1    |
+------+

Contiene datos numéricos

Si queremos encontrar filas que simplemente contengan datos numéricos (incluso si también contienen datos no numéricos), podemos hacer lo siguiente:

SELECT c1 
FROM t1 
WHERE c1 REGEXP '[0-9]+';

Resultado:

+-----------+
| c1        |
+-----------+
| 0         |
| 1         |
| +1        |
| -1        |
| 00.00     |
| 73.45     |
| +73.45    |
| -73.45    |
| .246      |
| -.34e7    |
| 12.e-3    |
| 1.2e+4    |
| 9afc      |
| e7        |
| +e0       |
| 5 Dollars |
+-----------+

Clases de caracteres POSIX

MariaDB admite clases de caracteres POSIX, lo que significa que podemos usar [:digit:] en lugar de [0-9] en nuestras expresiones regulares.

Ejemplo:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[[:digit:]]?$';

Resultado:

+------+
| c1   |
+------+
| 0    |
| 1    |
+------+