SQL,varchar字段,带小数条目= ORDER BY未正确排序

时间:2013-11-09 09:26:27

标签: php mysql sql math numbers

所以我有一个带VARCHAR字段的表。它用于对很多小数值进行排序:

假设我的VARCHAR字段中有以下条目:

  • 9.99
  • 263.28
  • 9.98

假设我想使用ORDER BY varchar DESC显示所有条目。结果将是:

  • 9.99
  • 9.98
  • 263.28

显然263.28应该是第一个。怎么了?

2 个答案:

答案 0 :(得分:3)

如果varchar字段中包含所有十进制值,则只需将其转换为十进制,然后应用order by子句。我对mysql数据类型和转换函数并不太了解,但在MS SQL中你可以将它转换为十进制,如

ORDER BY CAST(field AS DECIMAL(18,2)) DESC

更新:

是的,在MySQL中还有强制转换函数:http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

答案 1 :(得分:1)

如果您通过varchar列进行排序,mysql将按字母顺序排序。第一个字符“2”出现在“9”之前。这就是你得到你看到的订单的原因。在order by子句中将varchar列转换为decimal,它应该按预期工作。

或者,您可以将“9.99”更新为“009.99”,依此类推,以便所有行都具有相同的字符数。然后按字母顺序排序将匹配数字排序。我并不是建议您实际使用它作为解决方案 - 它只是向您展示数据库中的工作方式。