Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chỉ trả về giá trị số trong MySQL

Truy vấn MySQL sau chỉ trả về những hàng có giá trị số trong một cột nhất định.

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;

Bảng hiện đã được tạo và chứa dữ liệu 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ị dạng số

Chúng ta có thể sử dụng truy vấn sau để trả về tất cả các giá trị số từ bảng trên:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

Kết quả:

+--------+
| c1     |
+--------+
| 0      |
| 1      |
| +1     |
| -1     |
| 00.00  |
| 73.45  |
| +73.45 |
| -73.45 |
| .246   |
| -.34e7 |
| 1.2e+4 |
| e7     |
| +e0    |
+--------+

Ở đây, chúng tôi đã sử dụng REGEXP hàm để chỉ khớp các giá trị khớp với mẫu đã chỉ định của chúng tôi.

Trả về số nguyên

Nếu chúng ta chỉ muốn trả về số nguyên, thì mẫu có thể đơn giản hơn rất nhiều:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[0-9]+$';

Kết quả:

+------+
| c1   |
+------+
| 0    |
| 1    |
+------+

Chứa dữ liệu số

Nếu chúng ta muốn tìm các hàng chỉ chứa dữ liệu số (ngay cả khi chúng cũng chứa dữ liệu không phải số), chúng ta có thể làm như sau:

SELECT c1 
FROM t1 
WHERE c1 REGEXP '[0-9]+';

Kết quả:

+-----------+
| 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 |
+-----------+

Các lớp ký tự POSIX

MySQL hỗ trợ các lớp ký tự POSIX, có nghĩa là chúng ta có thể sử dụng [:digit:] thay vì [0-9] trong các biểu thức chính quy của chúng tôi.

Ví dụ:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[[:digit:]]?$';

Cái nào tương đương với cái sau:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[0-9]?$';

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhận dữ liệu 1 giờ qua trong MySQL

  2. count (*) và count (column_name), sự khác biệt là gì?

  3. Kích hoạt hỗ trợ MySQL InnoDB Storage Engine trong cài đặt XAMPP

  4. So sánh hai cơ sở dữ liệu MySQL

  5. Làm cách nào để tìm kiếm dấu gạch chéo (\) trong MySQL? và tại sao không cần thoát (\) cho where (=) nhưng lại bắt buộc phải Like?