Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengurutkan kolom string yang berisi angka dalam SQL?

Pergi pada asumsi selalu WORD_space_NUMBER ini seharusnya berhasil:

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

Gunakan POSISI untuk menemukan ruang, SUBSTRING untuk mengambil nomor setelahnya, dan CAST untuk menjadikannya nilai yang sebanding.

Jika ada pola yang berbeda pada kolom, beri tahu saya dan saya akan mencoba menemukan solusi yang lebih baik.

EDIT Terbukti berhasil:

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)

abaikan nama tabel/kolom saya yang lumpuh, tetapi beri saya hasil yang benar. Juga melangkah lebih jauh dan menambahkan pengurutan ganda untuk memecah awalan huruf dengan numerik.

Sunting SUBSTRING_INDEX akan membuatnya sedikit lebih mudah dibaca.

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. cara menggunakan fungsi kanonik di Entity Framework dan Mysql

  2. Grup fasihDengan membuat SQLSTATE[42000] dengan kueri SQL yang valid di Laravel 5.3

  3. Konversi String Waktu ke Jam Desimal PHP

  4. MySQL BUAT TABEL JIKA TIDAK ADA -> Kesalahan 1050

  5. MySQL:Interval rata-rata antar record