ホームページ >データベース >mysql チュートリアル >SQL で数値が埋め込まれた文字列列をソートするにはどうすればよいですか?
SQL で数値が埋め込まれた文字列列を並べ替える
SQL で数値を含む文字列列を並べ替えるには課題が生じる場合があります。多くのデータベースの自然な並べ替えアルゴリズムでは、「1」の後に「12」が配置されるなど、数字が間違った順序で配置されます。この動作はほとんどのアプリケーションでは許容されますが、特定のニーズにとっては望ましくない場合があります。
純粋な SQL を使用して数値が埋め込まれた文字列列を並べ替えることは可能ですか?
解決策
列が「WORD space NUMBER」の特定のパターンに従っていると仮定すると、次のコード スニペットを使用して列を正しく並べ替えることができます:
SELECT * FROM table ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)
その仕組みは次のとおりです:
PROOF OF CONCEPT
次の例は、並べ替え動作を示しています。
mysql> INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11'); mysql> SELECT * FROM t ORDER BY st; mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
2 番目のクエリは、「a 1」を「a 12」の前に配置して、結果を正しく並べ替えます。
考慮事項
列パターンが「WORD space NUMBER」と異なる場合は、別の回避策が必要になる可能性があります。
ENHANCEMENTS
次の拡張クエリ数値を含む文字プレフィックスを区切る二重ソートを追加します:
ORDER BY SUBSTRING_INDEX(st, " ", 1) ASC, CAST(SUBSTRING_INDEX(st, " ", -1) AS SIGNED)
この変更されたコード スニペットは、より包括的なソート ソリューションを提供します。
以上がSQL で数値が埋め込まれた文字列列をソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。