Sử dụng SUBSTRING_INDEX() để tìm kiếm và sắp xếp theo vị trí xuất hiện của số.
Tạo bảng demo
mysql> create table DemoTable (Number varchar(100)); Query OK, 0 rows affected (0.60 sec)
Chèn dữ liệu
mysql> insert into DemoTable values('235678');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('1634990');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('678590');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('908765432');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('222343388773');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable values('09028215');
Query OK, 1 row affected (0.51 sec)
Hiển thị dữ liệu
mysql> select * from DemoTable;
Kết quả
+--------------+ | Number | +--------------+ | 235678 | | 1634990 | | 678590 | | 908765432 | | 222343388773 | | 09028215 | +--------------+ 6 rows in set (0.00 sec)
Truy vấn tìm giá trị chứa số '5', sắp xếp theo vị trí xuất hiện đầu tiên
mysql> select Number from DemoTable where Number LIKE '%5%' ORDER BY LENGTH(SUBSTRING_INDEX(Number, '5', 1));
Kết quả - Sắp xếp theo vị trí '5' xuất hiện sớm nhất
+-----------+ | Number | +-----------+ | 235678 | | 678590 | | 908765432 | | 09028215 | +-----------+ 4 rows in set (0.00 sec)
Giải thích:
LIKE '%5%': Lọc chỉ các chuỗi chứa chữ số 5.SUBSTRING_INDEX(Number, '5', 1): Lấy phần chuỗi TRƯỚC lần xuất hiện đầu tiên của '5'.LENGTH(...): Độ dài phần trước đó = vị trí của '5' (0-based).ORDER BYđộ dài này → '5' xuất hiện càng sớm càng lên đầu.
Ví dụ vị trí:
- '235678': phần trước '5' là '23' → length=2 → vị trí 3
- '678590': phần trước '5' là '678' → length=3 → vị trí 4
- '908765432': phần trước '5' là '90876' → length=5 → vị trí 6
- '09028215': phần trước '5' là '0902821' → length=7 → vị trí 8