Následující příklady PostgreSQL vrátí pouze ty řádky, které v daném sloupci nemají číselnou hodnotu.
Ukázková data
Vytvořme tabulku s ukázkovými daty:
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;
Tabulka byla nyní vytvořena a obsahuje následující údaje:
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 Deset 5 dolarůSloupec je
varchar(255)
sloupec, takže není číselný. Může (a obsahuje) čísla, ale ty jsou uloženy jako znaková data. Může také obsahovat libovolný text (což obsahuje).Vrátí nečíselné hodnoty
K vrácení nečíselných hodnot z výše uvedené tabulky můžeme použít následující dotaz:
SELECT c1 FROM t1 WHERE c1 !~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Výsledek:
c1 ----------- 12,e-3 a 9afc e7 +e0 deset 5 dolarůVrátí jiná než celá čísla
Pokud chceme vrátit pouze necelá čísla, může být dotaz mnohem jednodušší:
SELECT c1 FROM t1 WHERE c1 !~ '^[0-9]+$';
Výsledek:
c1 ----------- +1 -1 00,00 73,45 +73,45 -73,45 ,246 -,34e7 12,e-3 1,2e+4 a 9afc e7 +e0 deset 5 dolarůNeobsahuje číselná data
Pokud chceme najít řádky, které neobsahují číselná data, můžeme udělat následující:
SELECT c1 FROM t1 WHERE c1 !~ '[0-9]+';
Výsledek:
c1 ----- a TenV PostgreSQL
!~
je operátor rozlišující malá a velká písmena, který se používá k vrácení hodnot, které neodpovídají danému regulárnímu výrazu. Pro shody bez rozlišení velkých a malých písmen použijte!~*
.Můžete použít
~
vrátit všechny řádky, které dělají odpovídat regulárnímu výrazu (a~*
pro shody bez rozlišení velkých a malých písmen).