在 MariaDB 中仅返回数值
以下 MariaDB 示例仅返回在给定列中具有数值的那些行。
这些示例使用该函数返回与指定模式匹配的值。REGEXP
示例数据
假设我们创建一个这样的表:
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 | | Ten | | 5 Dollars | +———–+
该列是列,因此它不是数字。它可以(并且确实)包含数字,但这些数字存储为字符数据。它还可以包含任意文本(它确实如此)。varchar(255)
返回所有数值
我们可以使用以下查询返回上表中的所有数值:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
输出:
+--------+
| c1 |
+--------+
| 0 |
| 1 |
| +1 |
| -1 |
| 00.00 |
| 73.45 |
| +73.45 |
| -73.45 |
| .246 |
| -.34e7 |
| 1.2e+4 |
| e7 |
| +e0 |
+--------+Return Integers
If we only want to return integers, the query can be a lot simpler:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[0-9]+$';
Result:
+——+ | c1 | +——+ | 0 | | 1 | +——+
Contains Numeric Data
If we want to find rows that merely contain numeric data (even if they also contain non-numeric data), we can do the following:
SELECT c1
FROM t1
WHERE c1 REGEXP '[0-9]+';
输出:
+-----------+
| c1 |
+-----------+
| 0 |
| 1 |
| +1 |
| -1 |
| 00.00 |
| 73.45 |
| +73.45 |
| -73.45 |
| .246 |
| -.34e7 |
| 12.e-3 |
| 1.2e+4 |
| 9afc |
| e7 |
| +e0 |
| 5 Dollars |
+-----------+POSIX 字符类
MariaDB 支持 POSIX 字符类,这意味着我们可以代替正则表达式使用。[:digit:]``[0-9]
例:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[[:digit:]]?$';
输出:
+------+
| c1 |
+------+
| 0 |
| 1 |
+------+