• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザIDのソート)

ユーザIDのソートでうまく並びません。解決方法はありますか?

このQ&Aのポイント
  • ユーザIDをソートする際に困っています。IDの形式はCHAR型7桁で、アルファベットで始まります。
  • 期待するソート結果は「A0001」「A0002」などのように連番で表示したいのに、実際には「A0001」「A0010」「A0011」というように並んでしまいます。
  • アルファベットで始まるIDや固定桁数の制約があるため、単純なソートでは解決できません。他の方法を探しています。アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#86752
noname#86752
回答No.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)

回答No.2

試してませんが、こんな感じでだめでしょうか? 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は素人なんでうまく動くか、もしくはもっとスマートなやり方あるかわかりませんが…(^^;

回答No.1

こんにちは。 結構難しいですね・・・。 考え方としては、分けるしかないかと思います・・・。 まず、先頭のアルファベットのみ切り出してソート。 次に後ろから数えて「0」が出てくるまでの数字を切り出してソート。 SQLでやるにしろ、ロジックでやるにしろ、これしか思いつきません・・・。 (^^ゞ

関連するQ&A