MySQL-字符串按照数值排序

当MySQL的varchar字段存储数值且需要进行排序时,直接使用ORDER BY可能会导致错误结果。解决方法包括与int进行计算(如加0、减2等)或使用cast()、convert()函数将varchar转换为INT进行排序。这两种方法都能确保正确的数值排序。
摘要由CSDN通过智能技术生成

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

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值