PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Restituisce valori non numerici da una colonna del database PostgreSQL

I seguenti esempi di PostgreSQL restituiscono solo quelle righe che non hanno un valore numerico in una determinata colonna.

Dati di esempio

Creiamo una tabella con dati di esempio:

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 tabella è stata ora creata e contiene i seguenti dati:

    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 colonna è un varchar(255) colonna, quindi non è numerico. Può (e lo fa) contenere numeri, ma questi vengono memorizzati come dati di caratteri. Può anche contenere testo arbitrario (cosa che fa).

Restituisci i valori non numerici

Possiamo utilizzare la seguente query per restituire i valori non numerici dalla tabella precedente:

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

Risultato:

    c1     
-----------
 12.e-3
 a
 9afc
 e7
 +e0
 Ten
 5 Dollars

Restituisce non interi

Se vogliamo restituire solo numeri non interi, la query può essere molto più semplice:

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

Risultato:

    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

Non contiene dati numerici

Se vogliamo trovare righe che non contengono dati numerici, possiamo fare quanto segue:

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

Risultato:

 c1  
-----
 a
 Ten

In PostgreSQL, !~ è un operatore con distinzione tra maiuscole e minuscole utilizzato per restituire valori che non corrispondono all'espressione regolare specificata. Per le corrispondenze senza distinzione tra maiuscole e minuscole, usa !~* .

Puoi usare ~ per restituire tutte le righe che fanno corrisponde all'espressione regolare (e ~* per le corrispondenze senza distinzione tra maiuscole e minuscole).