Los siguientes ejemplos de PostgreSQL devuelven solo aquellas filas que no tienen un valor numérico en una columna determinada.
Datos de muestra
Vamos a crear una tabla con datos de muestra:
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 los valores no numéricos
Podemos usar la siguiente consulta para devolver los valores no numéricos de la tabla anterior:
SELECT c1
FROM t1
WHERE c1 !~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Resultado:
c1 ----------- 12.e-3 a 9afc e7 +e0 Ten 5 Dollars
Devolver números no enteros
Si solo queremos devolver números no enteros, la consulta puede ser mucho más simple:
SELECT c1
FROM t1
WHERE c1 !~ '^[0-9]+$';
Resultado:
c1 ----------- +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
No contiene datos numéricos
Si queremos encontrar filas que no contengan datos numéricos, podemos hacer lo siguiente:
SELECT c1
FROM t1
WHERE c1 !~ '[0-9]+';
Resultado:
c1 ----- a Ten
En PostgreSQL, !~
es un operador que distingue entre mayúsculas y minúsculas que se utiliza para devolver valores que no coinciden con la expresión regular dada. Para coincidencias que no distinguen entre mayúsculas y minúsculas, utilice !~*
.
Puedes usar ~
para devolver todas las filas que do coincidir con la expresión regular (y ~*
para coincidencias que no distinguen entre mayúsculas y minúsculas).