SQL での数値を含む文字列カラムのソート
数値を含む文字列カラムをソートする場合、デフォルトの MySQL ソート アルゴリズムは文字の後に数値を配置します。これは、常に望ましい動作であるとは限りません。
問題:
数値を含む次の文字列列を昇順に並べ替えます:
name |
---|
a 1 |
a 12 |
a 2 |
a 3 |
期待される動作結果は次のとおりです:
name |
---|
a 1 |
a 2 |
a 3 |
a 12 |
SQL による解決策:
列パターンが常に "WORD space NUMBER" であると仮定すると、次の SQL クエリを使用できます:
<code class="sql">SELECT * FROM table ORDER BY CAST(SUBSTRING(column, LOCATE(' ', column) + 1) AS SIGNED);</code>
または、SUBSTRING_INDEX:
<code class="sql">ORDER BY SUBSTRING_INDEX(column, " ", 1) ASC, CAST(SUBSTRING_INDEX(column, " ", -1) AS SIGNED);</code>
このクエリは SUBSTRING_INDEX を使用して文字列の単語部分と数値部分を個別に抽出し、それに応じて並べ替えます。
説明:
この解決策は、文字列内のスペース文字の後の部分文字列には常に数字が含まれるという事実に基づいています。この部分文字列を数値に変換すると、接頭辞の文字を無視して、列を数値的に並べ替えることができます。
注:
文字列列が " に続いていない場合は、 WORD space NUMBER" パターンの場合、目的の並べ替え結果を得るために追加のロジックまたは文字列操作関数が必要になる場合があります。
以上がMySQL で数値を含む文字列列を昇順に並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。