3

次の方法でmySQLでアルファベット順に並べ替えることは可能ですか?

A1
A2
A3
A5
A10
A11
A20
A23
A24

残念ながら、私が受け取っている注文は、以下のように注文されています。A10より前の番号がグループ化されていないことに注意してください。

A1
A10
A11
A12
A2 <A2
A20
A23
A24
A3 <A3
A5 <A5

注:これらの英数字の文字列は実際には郵便番号であるため、技術的には郵便番号のプレフィックスではないため、A01を入力することはできません。また、ユーザーはWebにあまり精通していないため、システムがデータを適切に並べ替えるのに役立つ他のデータをユーザーが入力することは避けたいと思います。また、これらの英数字の文字列はいつでも削除および追加できるため、正しい順序でデータベースに入力することはできません。

4

4 に答える 4

5

varcharを数値に変換するUDFを作成します。次に、クエリのORDERBY句でその関数を使用します。

基本的に、関数は各行に数値を割り当てます。たとえば、AのASCII値(または最初の文字が何であれ)*100+残りのvarcharの解析された数値などです。

于 2010-01-07T05:09:28.067 に答える
4

文字列内の一貫した位置にある場合は、式を使用して文字列の数値部分を選択できます。次に、数値文字列にゼロを加算して、数値文字列を整数値に強制します。

...
ORDER BY SUBSTR(postalcode,2)+0
于 2010-01-07T05:33:42.073 に答える
0

1つの解決策は、郵便番号の形式を正確に把握し、それをその部分に分割することです。それが州、郵便番号だったとしましょう:それであなたはNC27605を持つことができました。次に、状態とzip_codeを個別に保存し、郵便番号を計算値にすることができます。次に、それらを順番に取得することは、状態、次にzip_codeで並べ替えることを意味します。

これは常に良いスタイルと見なされます。データベースのポイントは、データのすべての独立したビットに独立してアクセスできるようにすることです。

于 2010-01-07T05:11:34.503 に答える
0

順序アルファベット順です。

しかし、あなたはそれらを数字であるかのように注文したいと思います。残念ながら、ASCとDESCはあまり柔軟性がありません。

私のMySQLのコピー、New Riders、2000、Paul DuBois(現在は少し古くなっています)によると

MySQL 3.23.2以降、式をソート列として指定することもできます。たとえば、 `ORDER BY RAND()はランダムな順序で行を返します

この機能がまだ利用可能であり、組み込み関数を見つけるか、varcharを整数に変換するためにキャストできる場合、ORDER BYその関数に変換することは可能でしょうか?または、私はそれに読みすぎていますか?

うーん、ビル・カーウィンが一番よく表現していると思います。

于 2010-01-07T05:26:13.573 に答える