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

MySQL - urutkan string yang dipisahkan koma di kolom

Itu mungkin, tapi bukan ide yang bagus.

Sebagai contoh, Anda dapat membagi daftar yang dipisahkan koma dengan menghasilkan rentang angka dan menggunakannya dengan SUBSTRING_INDEX untuk mendapatkan setiap elemen. Namun rentang angka harus sebesar jumlah maksimum nilai yang dibatasi.

Anda kemudian dapat menggunakan GROUP_CONCAT untuk menggabungkan kembali daftar tersebut dalam urutan yang benar. Perhatikan bahwa urutannya akan berbeda tergantung pada apakah Anda telah memasukkan nilai yang dipisahkan sebagai angka / bilangan bulat atau membiarkannya sebagai string.

SELECT id, title, GROUP_CONCAT(aNumber ORDER BY aNumber)
FROM
(
    SELECT id, title, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, ',', tens.acnt * 10 + units.acnt + 1), ',', -1) AS UNSIGNED) AS aNumber
    FROM some_table
    CROSS JOIN
    (SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
    CROSS JOIN
    (SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
    WHERE LENGTH(numbers) - LENGTH(REPLACE(numbers, ',', '')) >= tens.acnt * 10 + units.acnt
) sub0
GROUP BY id, title;

Ditunjukkan di sini di SQL fiddle (jika SQL fiddle memutuskan untuk bekerja):-

http://www.sqlfiddle.com/#!9/c9703ee/4

Pilihan pertama adalah mentransmisikan nilai-nilai sebagai bilangan bulat untuk mengurutkannya secara numerik, yang ke-2 tidak mentransmisikannya tetapi hanya membiarkannya sebagai string, maka urutan pengurutannya berbeda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat diagram lingkaran yang menampilkan jumlah sesuatu yang didaftarkan oleh setiap orang?

  2. Performa MySQL pada 6 juta tabel baris

  3. Program MySQL mysql_tzinfo_to_sql

  4. Permintaan tunggal Mysql bergabung dengan 3 tabel dan dapatkan semua hasilnya

  5. Sintaks MYSQL tidak mengevaluasi tidak sama dengan di hadapan NULL