【问题标题】:MySQL ORDER BY not working for numbersMySQL ORDER BY 不适用于数字
【发布时间】:2012-06-03 16:30:21
【问题描述】:

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

希望得到答复... 提前谢谢..

【问题讨论】:

标签: java mysql


【解决方案1】:

听起来您的列类型仍然是 text 列,即使它包含数字 - 所以它们是按字典顺序排序的。如果您希望它们被 视为数字,您应该让 也输入一个数字。

当然,这不仅会影响排序 - 所有当您为列使用适当的类型时,您的代码可能会得到改进。仅仅因为您可以在字符串中粘贴几乎任何数据并不意味着这是一个好主意。选择与所涉及的真实数据最匹配的数据类型。

此外,您不应该像那样指定 PENumber 值 - 您应该使用准备好的语句,在 SQL 中带有一个占位符参数,您可以单独为其提供值。动态构造 SQL 会导致 SQL Injection vulnerabilities,以及不必要的转换和代码与数据的不良分离。

【讨论】:

    【解决方案2】:

    它正在工作.. 它按字母顺序排序!您已将此列声明为 varchar,因此将其中的数据视为字符串。所以 3 在字母表中位于 8 之前,这就是为什么它在它之前。如果要将数字排序为数字而不是字符串,则需要将列类型更改为 int!

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-22
          • 1970-01-01
          • 2018-03-31
          相关资源
          最近更新 更多