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 | +------+