sql >> Databáze >  >> RDS >> Mysql

MySQL - řazení řetězců oddělených čárkami ve sloupci

Je to možné, ale ve skutečnosti to není dobrý nápad.

Jako příklad můžete rozdělit seznam oddělený čárkami tak, že vygenerujete řadu čísel a použijete to s SUBSTRING_INDEX k získání každého prvku. Rozsah čísel však musí být tak velký jako maximální počet hodnot s oddělovači.

Potom můžete použít GROUP_CONCAT ke spojení seznamu ve správném pořadí. Všimněte si, že pořadí se bude lišit v závislosti na tom, zda jste rozdělené hodnoty přenesli jako čísla / celá čísla nebo je nechali jako řetězce.

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;

Zde je ukázáno na SQL housle (pokud se SQL housle rozhodne pracovat):-

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

První výběr přetypuje hodnoty jako celá čísla, aby je seřadil numericky, druhý je nepřetypuje, ale ponechá je jako řetězce, takže pořadí řazení je jiné.




  1. Rozdíl v požadovaném čase pro vložení záznamů InnoDB/MyISAM

  2. Jak zobrazím seznam všech tabulek ve všech databázích na serveru SQL Server v jedné sadě výsledků?

  3. Po uzavření příkazu nejsou povoleny žádné operace

  4. Zkontrolujte, zda je objekt primárním klíčem pomocí OBJECTPROPERTY() na serveru SQL Server