ホームページ >データベース >mysql チュートリアル >SQL で数値が埋め込まれた文字列列をソートするにはどうすればよいですか?

SQL で数値が埋め込まれた文字列列をソートするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-25 04:13:30814ブラウズ

How Can I Sort String Columns with Embedded Numbers in SQL?

SQL で数値が埋め込まれた文字列列を並べ替える

SQL で数値を含む文字列列を並べ替えるには課題が生じる場合があります。多くのデータベースの自然な並べ替えアルゴリズムでは、「1」の後に「12」が配置されるなど、数字が間違った順序で配置されます。この動作はほとんどのアプリケーションでは許容されますが、特定のニーズにとっては望ましくない場合があります。

純粋な SQL を使用して数値が埋め込まれた文字列列を並べ替えることは可能ですか?

解決策

列が「WORD space NUMBER」の特定のパターンに従っていると仮定すると、次のコード スニペットを使用して列を正しく並べ替えることができます:

SELECT *
FROM table
ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)

その仕組みは次のとおりです:

  • LOCATE(' ',column) は、文字列内のスペース文字の位置を検索します。
  • SUBSTRING(column,LOCATE(' ',column) 1) は、文字列の数値部分を抽出します
  • CAST(... 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。