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

自然ソートSQLORDERBY

    これでうまくいきます:

    SELECT value
    FROM Table1
    ORDER BY value REGEXP '^[A-Za-z]+$'
            ,CAST(value as SIGNED INTEGER)
            ,CAST(REPLACE(value,'-','')AS SIGNED INTEGER)
            ,value
    

    the ORDER BYの4つのレベル :

    1. REGEXP 任意のアルファ線に1を割り当て、非アルファ線に0を割り当てます
    2. SIGNED INT ダッシュの前の部分ですべての数値を並べ替えます。
    3. SIGNED INT ダッシュを削除した後、ダッシュの前の同じ値を持つアイテムをダッシュ​​の後の部分で並べ替えます。 2番を置き換える可能性がありますが、万が一の場合に備えて、90-1を9-01と同じように扱いたくないでしょう。
    4. 文字をアルファベット順に並べ替えます。

    デモ: SQL Fiddle




    1. SQL ServerでのDATENAME()の例

    2. 別のテーブルに存在しない1つのテーブルからすべてのレコードを選択するにはどうすればよいですか?

    3. 階層データをコピーするときに親子関係を保持する

    4. 署名されていないMySQLTINYINT