所以我有一个带有 VARCHAR 字段的表。它用于对很多小数值进行排序:
假设我的 VARCHAR 字段中有以下条目:
- 9.99
- 263.28
- 9.98
假设我想使用 ORDER BY varchar DESC 显示所有条目。结果将是:
- 9.99
- 9.98
- 263.28
什么时候显然263.28
应该是第一个。怎么了 ?
如果您在 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
如果您按 varchar 列排序,mysql 将按字母顺序排序。第一个字符“2”在“9”之前。这就是为什么你得到你看到的顺序。在 order by 子句中将 varchar 列转换为十进制,它应该可以按预期工作。
或者,您可以将“9.99”更新为“009.99”等,以使所有行的字符数相同。然后字母排序将匹配数字排序。我并不是建议您实际使用它作为解决方案 - 它只是向您展示数据库中的工作方式。