Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - kommaseparierte Zeichenfolge in Spalte sortieren

Es ist möglich, aber keine wirklich gute Idee.

Beispielsweise können Sie eine durch Kommas getrennte Liste aufteilen, indem Sie einen Zahlenbereich generieren und diesen mit SUBSTRING_INDEX verwenden, um jedes Element zu erhalten. Der Zahlenbereich muss jedoch so groß sein wie die maximale Anzahl von getrennten Werten.

Sie könnten dann GROUP_CONCAT verwenden, um die Liste wieder in der richtigen Reihenfolge zusammenzufügen. Beachten Sie, dass die Reihenfolge unterschiedlich ist, je nachdem, ob Sie die aufgeteilten Werte als Zahlen / Ganzzahlen umgewandelt oder als Zeichenfolgen belassen haben.

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;

Hier auf SQL Fiddle demonstriert (falls SQL Fiddle funktioniert):-

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

Die erste Auswahl wandelt die Werte als Ganzzahlen um, um sie numerisch zu sortieren, die zweite wandelt sie nicht um, sondern belässt sie einfach als Zeichenfolgen, daher ist die Sortierreihenfolge anders.