4

ORDER BY は数値では正しく機能しませんが、英数字または文字のみを含む列を指定するとうまく機能します。私が与えたコードは、

dbResult = dbStatement.executeQuery("SELECT Bid_Number,Vendor_Name,Vendor_Address,Amount,Tax_Percentage,Amount_Aftertax,Expected_Deliverydate,Vendor_Code FROM purchase_bid    where PE_Number='"+PENumber+"' ORDER BY Amount_Aftertax ASC"); 

私のテーブルにAmount_Aftertax列の値がある場合、

840.0
780.0
3180.0
3810.0

このコードを与えることで、この順序に従って結果が得られます

3180.0
3810.0
780.0
840.0

返信をお待ちしております...よろしくお願いします..

4

4 に答える 4

7

数値が含まれていても、列の種類はまだテキスト列であるように思われるため、辞書順で並べ替えられています。それらを数値として扱いたい場合は、の型も数値にする必要があります。

もちろん、これは順序付けだけに影響するわけではありません。列に適切な型を使用すると、すべてのコードが改善される可能性があります。ほとんどすべてのデータを文字列に貼り付けることができるからといって、それが良い考えであるとは限りません。関連する実際のデータに最も近いデータ型を選択してください。

さらに、そのように PENumber 値を指定しないでください。値を個別に指定する SQL のプレースホルダー パラメーターを使用して、準備済みステートメントを使用する必要があります。SQL を動的に構築すると、SQL インジェクションの脆弱性や、不要な変換、データからのコードの分離が不十分になる可能性があります。

于 2012-05-29T12:41:57.143 に答える
2

それは働いています..それはアルファベット順にソートされています! この列は varchar として宣言されているため、列内のデータは文字列と見なされます。したがって、3 はアルファベットで 8 の前にあり、それが 8 の前にある理由です。数値を文字列ではなく数値として並べ替えたい場合は、列の型を int に変更する必要があります。

于 2012-05-29T12:42:21.057 に答える
2

SELECT * FROM table_name ORDER BY convert(`column_name`, decimal) DESC;

このようなものでなければなりません。最初に varchar2 を 10 進数に変換し、順序付けを行う必要があります。

注: column_name では、必ず '' の代わりに `` を使用してください。また、フィールド タイプを数値に変換することをお勧めします。手遅れの場合はこれを使用してください。

于 2020-01-04T07:47:42.913 に答える
1

結果はテキストとして扱われるため、そのように並べ替えられます。「3」は「7」の前に来るので、「3」で始まるものは、たとえそれがより高い数であっても、単語のように順序付けられます。

データベースのフィールドが数値としてフォーマットされていることを確認してください。この場合、数値のfloat後に小数点以下の桁があるように見えるため、型が必要になります。完了すると、正しくフォーマットされます。

于 2012-05-29T12:44:54.837 に答える