#632 テキスト型フィールドを数値として並べ替えるには? クエリ

テーブルのフィールドのデータ型として「テキスト型」が設定されている場合、そこに実際に入力されているデータがたとえ数字のみであっても、クエリ等で並べ替えを行った場合にはあくまでもテキストとして比較照合が行われるため、数値の大小順とはなりません。

たとえば下図の場合、テキスト型である「オーダー記号」フィールドに並べ替えを設定していますが、先頭の1文字めの文字・2文字めの文字・3文字めの文字〜〜〜〜というように並べ替えられるため、数値としてみた「101」が「1000」よりも大きくなっていることが分かります。





このようなとき、そのフィールドの値を”数値”として判断させて並べ替えるには、次のようにクエリを作ります。

  1. まず、並べ替えの基準としたいフィールドについて、Format$関数を使って値を右詰めにします。

    【例】
    オーダー記号: Format$([受注明細].[オーダー記号],"@@@@")

    この場合、オーダー記号は4桁の右詰めとなります。4桁に満たない場合には先頭にスペースが入ります。たとえば「10」という文字は「△△10」というように変換されます。

  2. そしてその演算フィールドに対して「昇順」などの並べ替えを設定します。


  3. これを実行すると次のような結果になります。


※ただし元データはあくまでもテキスト型ですので、アルファベット等が含まれている場合には文字としての並び順になります。たとえば下図では「10A」は「11」より大きいと判断されています。桁数が3ですので、「104」より大きく「110」よりは小さいと判断されていることが分かります。
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved