MySQL-字符串按照数值排序

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转换成二进制格式

结果都为:
在这里插入图片描述


版权声明:本文为JustDI0209原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。