MySQL 有个表字段设计的时候,设置为了 varchar 类型,存取的却是数值,后续有业务需要按照此字段排序,获取最大值。
按照最原始的排序语句为:
SELECT * FROM test_21 a ORDER BY a.testId desc;
结果为:

这个并不是想要的结果。
改造一下
SELECT * FROM test_21 a ORDER BY a.testId+0 desc;
SELECT * FROM test_21 a ORDER BY a.testId-2 desc;
SELECT * FROM test_21 a ORDER BY a.testId*1 desc;
SELECT * FROM test_21 a ORDER BY a.testId/4 desc;
MySQL 的 varchar 与 int 计算时,会转换为 int。
以上4个 sql 的执行结果都为

SELECT * FROM test_21 a ORDER BY cast(a.testId as SIGNED) desc;
SELECT * FROM test_21 a ORDER BY convert(a.testId,SIGNED) desc;
这两个函数都是用于格式转换的,二者没什么区别,
语法为:
CAST(expr AS type)
CONVERT(expr,type)
支持的类型有
| 值 | 说明 |
|---|---|
| DATE | 将expr转换成’YYYY-MM-DD’格式 |
| DATETIME | 将expr转换成’YYYY-MM-DD HH:MM:SS’格式 |
| TIME | 将expr转换成’HH:MM:SS’格式 |
| CHAR | 将expr转换成CHAR(固定长度的字符串)格式 |
| SIGNED | 将expr转换成INT(有符号的整数)格式 |
| UNSIGNED | 将expr转换成INT(无符号的整数)格式 |
| DECIMAL | 将expr转换成FLOAT(浮点数)格式 |
| BINARY | 将expr转换成二进制格式 |
结果都为:
