Следващите примери за PostgreSQL връщат само онези редове, които нямат числова стойност в дадена колона.
Примерни данни
Нека създадем таблица с примерни данни:
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;
Таблицата вече е създадена и съдържа следните данни:
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 Десет 5 доларапредварително>Колоната е
varchar(255)
колона, така че не е числова. Може (и съдържа) числа, но те се съхраняват като данни за знаци. Може също да съдържа произволен текст (което прави).Връщане на нечисловите стойности
Можем да използваме следната заявка, за да върнем нечисловите стойности от горната таблица:
SELECT c1 FROM t1 WHERE c1 !~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Резултат:
c1 ----------- 12.e-3 a 9afc e7 +e0 Десет 5 долараВръщане на нецели числа
Ако искаме да върнем само нецели числа, заявката може да бъде много по-проста:
SELECT c1 FROM t1 WHERE c1 !~ '^[0-9]+$';
Резултат:
c1 ----------- +1 -1 00.00 73.45 +73.45 -73.45 .246 -.34e7 12.e-3 1.2e+4 a 9afc e7 +e0 Десет 5 долараНе съдържа цифрови данни
Ако искаме да намерим редове, които не съдържат цифрови данни, можем да направим следното:
SELECT c1 FROM t1 WHERE c1 !~ '[0-9]+';
Резултат:
c1 ----- ДесеткаВ PostgreSQL,
!~
е оператор, чувствителен към малки и големи букви, който се използва за връщане на стойности, които не съвпадат с дадения регулярен израз. За съвпадения без значение на малки букви, използвайте!~*
.Можете да използвате
~
за да върнете всички редове, които правят съответства на регулярния израз (и~*
за съвпадения без разлика в главните букви).