Poniższe przykłady PostgreSQL zwracają tylko te wiersze, które nie mają wartości liczbowej w danej kolumnie.
Przykładowe dane
Stwórzmy tabelę z przykładowymi danymi:
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;
Tabela została utworzona i zawiera następujące dane:
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
Kolumna to varchar(255)
kolumna, więc nie jest liczbowa. Może (i zawiera) liczby, ale są one przechowywane jako dane znakowe. Może również zawierać dowolny tekst (co robi).
Zwróć wartości nieliczbowe
Możemy użyć następującego zapytania, aby zwrócić wartości nienumeryczne z powyższej tabeli:
SELECT c1
FROM t1
WHERE c1 !~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Wynik:
c1 ----------- 12.e-3 a 9afc e7 +e0 Ten 5 Dollars
Zwróć liczby niebędące liczbami całkowitymi
Jeśli chcemy zwrócić tylko liczby niecałkowite, zapytanie może być dużo prostsze:
SELECT c1
FROM t1
WHERE c1 !~ '^[0-9]+$';
Wynik:
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
Nie zawiera danych liczbowych
Jeśli chcemy znaleźć wiersze, które nie zawierają danych liczbowych, możemy wykonać następujące czynności:
SELECT c1
FROM t1
WHERE c1 !~ '[0-9]+';
Wynik:
c1 ----- a Ten
W PostgreSQL !~
jest operatorem rozróżniającym wielkość liter, który jest używany do zwracania wartości, które nie pasują do podanego wyrażenia regularnego. W przypadku dopasowań bez rozróżniania wielkości liter użyj !~*
.
Możesz użyć ~
aby zwrócić wszystkie wiersze, które robi dopasuj wyrażenie regularne (i ~*
dla dopasowań bez rozróżniania wielkości liter).