Følgende PostgreSQL-eksempler returnerer kun de rækker, der ikke har en numerisk værdi i en given kolonne.
Eksempel på data
Lad os oprette en tabel med eksempeldata:
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;
Tabellen er nu oprettet og indeholder følgende data:
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
Kolonnen er en varchar(255)
kolonne, så den er ikke numerisk. Det kan (og gør) indeholde tal, men disse gemmes som tegndata. Den kan også indeholde vilkårlig tekst (hvilket den gør).
Returner de ikke-numeriske værdier
Vi kan bruge følgende forespørgsel til at returnere de ikke-numeriske værdier fra ovenstående tabel:
SELECT c1
FROM t1
WHERE c1 !~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Resultat:
c1 ----------- 12.e-3 a 9afc e7 +e0 Ten 5 Dollars
Returner ikke-heltal
Hvis vi kun ønsker at returnere ikke-heltal, kan forespørgslen være meget enklere:
SELECT c1
FROM t1
WHERE c1 !~ '^[0-9]+$';
Resultat:
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
Indeholder ikke numeriske data
Hvis vi ønsker at finde rækker, der ikke indeholder numeriske data, kan vi gøre følgende:
SELECT c1
FROM t1
WHERE c1 !~ '[0-9]+';
Resultat:
c1 ----- a Ten
I PostgreSQL, !~
er en operator, der skelner mellem store og små bogstaver, og som bruges til at returnere værdier, der ikke matcher det givne regulære udtryk. Brug !~*
, hvis der ikke skelnes mellem store og små bogstaver .
Du kan bruge ~
for at returnere alle rækker, der gør matche det regulære udtryk (og ~*
for store og små bogstaver).