所以我有一个带VARCHAR字段的表。它用于对很多小数值进行排序:
假设我的VARCHAR字段中有以下条目:
假设我想使用ORDER BY varchar DESC显示所有条目。结果将是:
显然263.28
应该是第一个。怎么了?
答案 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”,依此类推,以便所有行都具有相同的字符数。然后按字母顺序排序将匹配数字排序。我并不是建议您实际使用它作为解决方案 - 它只是向您展示数据库中的工作方式。