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

Devolver valores no numéricos de una columna de base de datos de PostgreSQL

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