3

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

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

  • 9.99
  • 263.28
  • 9.98

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

  • 9.99
  • 9.98
  • 263.28

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

4

2 回答 2

6

如果您在 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

于 2013-11-09T09:35:57.713 回答
1

如果您按 varchar 列排序,mysql 将按字母顺序排序。第一个字符“2”在“9”之前。这就是为什么你得到你看到的顺序。在 order by 子句中将 varchar 列转换为十进制,它应该可以按预期工作。

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

于 2013-11-09T09:36:54.357 回答