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

Sắp xếp cột chuỗi chứa số trong SQL?

Tiếp tục giả định nó luôn luôn là WORD_space_NUMBER điều này sẽ hoạt động:

SELECT   *
FROM     table
ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)

Sử dụng VỊ TRÍ để tìm không gian, hãy ĐĂNG KÝ để lấy số sau nó và CAST để làm cho nó trở thành một giá trị có thể so sánh được.

Nếu có một mẫu khác đối với cột, hãy cho tôi biết và tôi sẽ cố gắng tìm ra cách giải quyết tốt hơn.

CHỈNH SỬA Đã được chứng minh là hoạt động:

mysql> INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM t ORDER BY st;
+----+------+
| id | st   |
+----+------+
|  1 | a 1  |
|  4 | a 11 |
|  2 | a 12 |
|  3 | a 6  |
+----+------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
+----+------+
| id | st   |
+----+------+
|  1 | a 1  |
|  3 | a 6  |
|  4 | a 11 |
|  2 | a 12 |
+----+------+

mysql> INSERT INTO t (st) VALUES ('b 1'),('b 12'),('b 6'),('b 11');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
+----+------+
| id | st   |
+----+------+
|  1 | a 1  |
|  5 | b 1  |
|  3 | a 6  |
|  7 | b 6  |
|  4 | a 11 |
|  8 | b 11 |
|  2 | a 12 |
|  6 | b 12 |
+----+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM t ORDER BY LEFT(st,LOCATE(' ',st)), CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
+----+------+
| id | st   |
+----+------+
|  1 | a 1  |
|  3 | a 6  |
|  4 | a 11 |
|  2 | a 12 |
|  5 | b 1  |
|  7 | b 6  |
|  8 | b 11 |
|  6 | b 12 |
+----+------+
8 rows in set (0.00 sec)

bỏ qua tên bảng / cột khập khiễng của tôi, nhưng cho tôi kết quả chính xác. Cũng đi xa hơn một chút và thêm sắp xếp kép để ngắt tiền tố chữ cái bằng số.

Chỉnh sửa SUBSTRING_INDEX sẽ làm cho nó dễ đọc hơn một chút.

ORDER BY SUBSTRING_INDEX(st, " ", 1) ASC, CAST(SUBSTRING_INDEX(st, " ", -1) AS SIGNED)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy dữ liệu từ cơ sở dữ liệu mysql bằng javascript?

  2. Kết hợp ANSI 1992 JOIN và COMMA trong một truy vấn

  3. Truy vấn MySQL không hoạt động khi sử dụng biến php trong mệnh đề where

  4. thay đổi định dạng ngày mặc định truy vấn laravel sql

  5. Tạo bảng với PHP và điền từ MySQL