1.需求
MySQL 有个表字段设计的时候,设置为了 varchar 类型,存取的却是数值,后续有业务需要按照此字段排序,获取最大值。
按照最原始的排序语句为:
SELECT * FROM test_21 a ORDER BY a.testId desc;
结果为:
这个并不是想要的结果。
2.方法
改造一下
1)与 int 进行计算
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 的执行结果都为
2)cast() 或 convert()
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转换成二进制格式 |
结果都为: