sql >> データベース >  >> RDS >> Mysql

MySQL-列内のカンマ区切りの文字列を並べ替えます

    可能ですが、実際には良い考えではありません。

    例として、数値の範囲を生成し、それをSUBSTRING_INDEXで使用して各要素を取得することにより、コンマ区切りのリストを分割できます。ただし、数値の範囲は、区切られた値の最大数と同じ大きさである必要があります。

    次に、GROUP_CONCATを使用して、リストを正しい順序で結合し直すことができます。分割された値を数値/整数としてキャストしたか、文字列として残したかによって、順序が異なることに注意してください。

    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;
    

    ここでSQLフィドルについて説明します(SQLフィドルが機能することを決定した場合):-

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

    最初の選択は値を整数としてキャストして数値で並べ替えます。2番目の選択は値をキャストせずに文字列のままにするため、並べ替えの順序が異なります。




    1. Android用JDBCとWebサービス

    2. 別のテーブルのデータからカウント列を更新します

    3. pyodbcはデータベースに接続できません

    4. OracleのATAN()関数