Nếu bạn từng gặp một cột ký tự phải là cột số, thì luôn có khả năng nó chứa dữ liệu không phải số mà bạn không biết.
Trong MariaDB, bạn có thể chạy một truy vấn như sau để trả về dữ liệu không phải số từ cột.
Dữ liệu Mẫu
Giả sử chúng ta tạo một bảng như sau:
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
đó câu lệnh cuối cùng dẫn đến kết quả sau:
+-----------+ | 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 | +-----------+
Cột là một varchar(255)
, vì vậy nó không phải là số. Nó có thể (và không) chứa số nhưng chúng được lưu trữ dưới dạng dữ liệu ký tự. Nó cũng có thể chứa văn bản tùy ý (mà nó có).
Trả lại tất cả các giá trị không phải dạng số
Chúng ta có thể sử dụng truy vấn sau để trả về các giá trị không phải số từ bảng trên:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Kết quả:
+-----------+ | c1 | +-----------+ | 12.e-3 | | a | | 9afc | | Ten | | 5 Dollars | +-----------+
Trả về số không phải là số nguyên
Nếu chúng ta chỉ muốn trả về các số không phải là số nguyên, thì truy vấn có thể đơn giản hơn rất nhiều:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[0-9]+$';
Kết quả:
+-----------+ | 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 | +-----------+
Không Chứa Dữ liệu Số
Nếu chúng tôi chỉ muốn tìm các hàng không chứa bất kỳ dữ liệu số nào, chúng tôi có thể làm như sau:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '[0-9]+';
Kết quả:
+------+ | c1 | +------+ | a | | Ten | +------+
Chúng ta có thể sử dụng lớp POSIX để có được kết quả tương tự:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '[[:digit:]]';
Kết quả:
+------+ | c1 | +------+ | a | | Ten | +------+