Ако някога срещнете колона със знаци, която трябва да е числова колона, винаги има възможност тя да съдържа нечислови данни, за които не знаете.
В MariaDB можете да изпълните заявка като следната, за да върнете нечислови данни от колоната.
Примерни данни
Да предположим, че създаваме таблица като тази:
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;
Това SELECT
изявление в края води до това:
+-----------+ | 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 | +-----------+
Колоната е varchar(255)
колона, така че не е числова. Може (и съдържа) числа, но те се съхраняват като данни за знаци. Може също да съдържа произволен текст (което прави).
Връщане на всички нечислови стойности
Можем да използваме следната заявка, за да върнем нечислови стойности от горната таблица:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Резултат:
+-----------+ | c1 | +-----------+ | 12.e-3 | | a | | 9afc | | Ten | | 5 Dollars | +-----------+
Връщане на нецели числа
Ако искаме да върнем само нецели числа, заявката може да бъде много по-проста:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[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 | | Ten | | 5 Dollars | +-----------+
Не съдържа цифрови данни
Ако просто искаме да намерим редове, които не съдържат никакви цифрови данни, можем да направим следното:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '[0-9]+';
Резултат:
+------+ | c1 | +------+ | a | | Ten | +------+
Можем да използваме POSIX клас, за да получим същия резултат:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '[[:digit:]]';
Резултат:
+------+ | c1 | +------+ | a | | Ten | +------+