注文表があります。注文ごとに、ユーザーは (一意ではない) 注文番号を入力できます。これは、彼らが望むものなら何でもできます。
これらの注文を HTML テーブルに表示し、注文番号などのさまざまなフィールドで注文を並べ替えることができます。
クライアントの 1 人が、並べ替えの問題に気付きました。注文番号は として保存されるためVARCHAR
、辞書順でソートされます。問題は、すべての注文番号が数字であるとは限らないことです。一部は単語であり、他は英数字です。
たとえば、次のような注文番号を指定できます。
42
Order8
MyOrder
9
Order63
を使用してソートするORDER BY orderNumber
と、次のようになります。
42
9
MyOrder
Order63
Order8
デモ: http://sqlfiddle.com/#!2/7973e/1
これは私が望むものではありません。私はそれらを次のようにソートしたい:
9
42
MyOrder
Order8
Order63
文字列は辞書式に、数字は数値にしたい。私はうまくいくかもしれない何かを考えました:
ORDER BY IFNULL(NULLIF(CAST(orderNumber AS SIGNED), 0), orderNumber)
デモ: http://sqlfiddle.com/#!2/7973e/2
しかし、残念ながら、同じ結果が得られます (数値が文字列に再キャストされるため)。これらの値を希望どおりに並べ替えるにはどうすればよいですか? 文字列をある種の数値に「変換」する方法があればよいのですが。