- ベストアンサー
ユーザIDのソートでうまく並びません。解決方法はありますか?
- ユーザIDをソートする際に困っています。IDの形式はCHAR型7桁で、アルファベットで始まります。
- 期待するソート結果は「A0001」「A0002」などのように連番で表示したいのに、実際には「A0001」「A0010」「A0011」というように並んでしまいます。
- アルファベットで始まるIDや固定桁数の制約があるため、単純なソートでは解決できません。他の方法を探しています。アドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
試せる環境がないので、動くかどうか怪しいです。 select * from tableA order by rpad(id, 7, '#') これがだめなら select * from (select a,b,c,d,....,rpad(id, 7, '#') as sort_id from tableA) as tableA order by sort_id rpad(a,b,c)は aの文字列がb文字に達するまで、右側にcの文字列を付け足すと言う関数です。 ですので rpad('A0001', 7, '#') = A0001## rpad('A00010', 7, '#') = A00010# rpad('A000100', 7, '#') = A000100 rpad('A0002', 7, '#') = A0002## となります。一般的な文字コードの場合#は0より小さいので、ちょうど上のならびにソートされます。 7文字に満たないところにスペースが入っているのならrpad(rtrim(id,' '), 7, '#')にしてください。 後半の方法だとスピードは保障できません。動かなかったらごめんなさい。
その他の回答 (2)
- SpiralGalaxy
- ベストアンサー率39% (649/1653)
試してませんが、こんな感じでだめでしょうか? select userid from tableAAA where userid='_____' order by userid union select userid from tableAAA where userid='______' order by userid union select userid from tableAAA where userid='_______' order by userid SQLは素人なんでうまく動くか、もしくはもっとスマートなやり方あるかわかりませんが…(^^;
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 結構難しいですね・・・。 考え方としては、分けるしかないかと思います・・・。 まず、先頭のアルファベットのみ切り出してソート。 次に後ろから数えて「0」が出てくるまでの数字を切り出してソート。 SQLでやるにしろ、ロジックでやるにしろ、これしか思いつきません・・・。 (^^ゞ