テーブルにコードの列があります。それらは
AAA-XXXX-YYY
whereの形式です。
AAA
アルファベット順ですXXX
数値ですYYY
数値です
でアルファベット順の並べ替えを使用しAAA
、次に で数値の並べ替えを使用し、次に default_scopeXXXX
で数値の並べ替えを使用したいYYY
ので、それらにインデックスを付けると、そのように並べ替えられます。
列で英数字の並べ替えを行った場合、次のようになります。
AAA-1000-1
AAA-1000-111
AAA-1000-2
BB-1000-12
BBB-1000-1
BCA-1000-1
C-1000-12
しかし、数値ソートを使用すると、111 は 2 よりも大きくなります。
EDIT:AAA の長さは固定されていません。したがって、「AA」または「BBBB」または「CCC」の可能性があります。SQL SUBSTRING の使用について言及されていますが、位置が常に設定されているわけではありません。
EDIT2:おそらく、この並べ替えは default_scope で行う必要があることに言及する必要があるため、Object.all にアクセスすると、デフォルトでこのように並べ替えられます。
ご協力いただきありがとうございます!