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