PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Retornar valores não numéricos de uma coluna do banco de dados PostgreSQL


Os exemplos do PostgreSQL a seguir retornam apenas as linhas que não possuem um valor numérico em uma determinada coluna.

Dados de amostra


Vamos criar uma tabela com dados de exemplo:
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; 

A tabela já foi criada e contém os seguintes dados:
 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 Dez 5 dólares  
A coluna é um varchar(255) coluna, então não é numérico. Ele pode (e contém) números, mas estes são armazenados como dados de caracteres. Ele também pode conter texto arbitrário (o que ele faz).

Retorne os valores não numéricos


Podemos usar a seguinte consulta para retornar os valores não numéricos da tabela acima:
SELECT c1
FROM t1 
WHERE c1 !~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$'; 

Resultado:
 c1 ----------- 12.e-3 a 9afc e7 +e0 Dez 5 dólares

Retornar números não inteiros


Se quisermos apenas retornar não inteiros, a consulta pode ser muito mais simples:
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 Dez 5 dólares

Não contém dados numéricos


Se quisermos encontrar linhas que não contenham dados numéricos, podemos fazer o seguinte:
SELECT c1 
FROM t1 
WHERE c1 !~ '[0-9]+'; 

Resultado:
 c1 ----- um dez

No PostgreSQL, !~ é um operador que diferencia maiúsculas de minúsculas usado para retornar valores que não correspondem à expressão regular fornecida. Para correspondências que não diferenciam maiúsculas de minúsculas, use !~* .

Você pode usar ~ para retornar todas as linhas que fazem corresponde à expressão regular (e ~* para correspondências que não diferenciam maiúsculas de minúsculas).