MySQL如何对varchar类型存储的数字字符按数值规则正确排序
MySQL varchar类型数值字段按数值大小排序方案
直接对存储数值的varchar字段执行排序时,MySQL默认按字符串字典序处理,会出现10排在8.99之前的不符合预期的结果,你需要将字段转换为数值类型后再排序,可任选以下方案实现:
- 方案1:隐式类型转换(写法最简单)
排序语句:
MySQL会自动将字符串转为数值进行排序,兼容整数、小数格式的字符串。ORDER BY `column` + 0 ASC - 方案2:CAST显式类型转换(更严谨)
排序语句:
可根据实际存储的数值精度调整ORDER BY CAST(`column` AS DECIMAL(10,2)) ASCDECIMAL的参数,比如整数部分最多5位、小数部分最多3位可写为DECIMAL(8,3),避免隐式转换的潜在异常。 - 方案3:CONVERT显式类型转换
排序语句:
功能与CAST一致,仅语法写法存在区别。ORDER BY CONVERT(`column`, DECIMAL(10,2)) ASC
以上三种方案对示例数据排序后,输出顺序均为8.99、10、13.25、18.25,符合数值从小到大的排序要求。
内容的提问来源于stack exchange,提问作者mjedli
相关产品推荐
相关产品推荐

