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 之前,这就是为什么它在它之前.. 如果要将数字排序为数字而不是字符串,则需要将列类型更改为 int!

于 2012-05-29T12:42:21.057 回答
2

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

它应该是这样的。您应该首先将您的 varchar2 转换为十进制并进行排序。

注意:确保在 column_name 中使用 `` 而不是 ''。此外,您最好将字段类型转换为数字,如果为时已晚,请使用它。

于 2020-01-04T07:47:42.913 回答
1

结果以这种方式排序,因为它将其视为文本。'3' 在 '7' 之前,所以以 '3' 开头的任何东西,即使它是一个更大的数字,也会像一个单词一样被排序。

确保您的数据库具有格式化为数值的字段 - 在您的情况下,您需要一个float类型,因为您的数字后面似乎有小数位。完成后,它将正确格式化。

于 2012-05-29T12:44:54.837 回答