ホームページ > データベース > mysql チュートリアル > MySQL の `ORDER BY` 句で英数字データを正しくソートするにはどうすればよいですか?

MySQL の `ORDER BY` 句で英数字データを正しくソートするにはどうすればよいですか?

DDD
リリース: 2024-12-21 03:45:13
オリジナル
298 人が閲覧しました

How to Correctly Sort Alphanumeric Data in MySQL's `ORDER BY` Clause?

MySQL 'Order By' - 英数字を正しく並べ替える

MySQL では、'Order By' 句は指定されたカラムの値に基づいてデータを並べ替えます。ただし、英数字データを扱う場合、デフォルトの並べ替え方法では最初の桁が優先されるため、誤った順序付けが行われます。

問題の理解

たとえば、次のデータがあるとします。

1
2
3
4
5
6
7
8
9
10
11
12
ログイン後にコピー

そしてクエリを実行します。

select * from table order by xxxxx asc
ログイン後にコピー

結果は次のように並べ替えられます。

1
10
11
12
2
3
4
5
6
7
8
9
ログイン後にコピー

これは、後続の文字に関係なく、順序が最初の桁によって決定されるためです。

問題の解決

英数字データを正しく並べ替えるには、次のようにします。さまざまなトリックを使用できます:

  1. を使用した英数字の並べ替えバイナリ方法: これには、英数字値をバイナリに変換し、そのバイナリ値を使用して並べ替えることが含まれます。
  2. キャスト方法を使用した英数字並べ替え: このアプローチでは、英数字値を符号付きとしてキャストします。整数を取得し、その整数を使用して並べ替えます
  3. 自然な並べ替え: このメソッドは、数字と文字の両方を考慮して、値の自然な順序に基づいてデータを並べ替えます。
  4. 混合数値の並べ替え英数字の値: この場合、英数字の値を符号なし整数に変換して並べ替えることができます。

コード例

Bin Way を使用した英数字の並べ替え:

SELECT 
tbl_column, 
BIN(tbl_column) AS binray_not_needed_column
FROM db_table
ORDER BY binray_not_needed_column ASC , tbl_column ASC
ログイン後にコピー

自然並べ替え:

SELECT alphanumeric, integer
       FROM sorting_test
       ORDER BY LENGTH(alphanumeric), alphanumeric  
ログイン後にコピー

英数字と混合した数値の並べ替え:

SELECT version
FROM version_sorting
ORDER BY CAST(version AS UNSIGNED), version;
ログイン後にコピー

これらのトリックを採用することで、英数字データが確実に並べ替えられるようになります。正しく、項目の望ましい順序を維持します。

以上がMySQL の `ORDER BY` 句で英数字データを正しくソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート