Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - classifica a string separada por vírgulas na coluna


É possível, mas não é uma boa ideia.

Como exemplo, você pode dividir uma lista separada por vírgulas gerando um intervalo de números e usando-o com SUBSTRING_INDEX para obter cada elemento. No entanto, o intervalo de números precisa ser tão grande quanto o número máximo de valores delimitados.

Você pode então usar GROUP_CONCAT para juntar a lista novamente na ordem correta. Observe que a ordem será diferente dependendo se você converteu os valores divididos como números / inteiros ou os deixou como strings.
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;

Demonstrado aqui no violino SQL (se o violino SQL decidir funcionar):-

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

A primeira seleção está lançando os valores como inteiros para classificá-los numericamente, a segunda não está lançando-os, mas apenas deixando-os como strings, portanto, a ordem de classificação é diferente.