MySQL 中将 varchar 字段转换成数字进行排序

更新日期: 2016-11-04 阅读次数: 9051 分类: MySQL

问题来源于 ecshop 的商品属性列表排序 bug。

includes/lib_goods.php 中是这样写的

'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id';

然而 attr_price 字段非常傻逼地使用了 varchar 类型,造成 51 这样的价格会排在 111 后面。

修复方法是将 attr_price 转换为数字再进行排序, *1 即可

'ORDER BY a.sort_order, g.attr_price * 1, g.goods_attr_id';

测试了整型、浮点型、为 null (默认转换为0)都可以正常排序。

注:

网上的一种做法是,

order by cast(col as unsigned)

但是,这会把小数位去掉,不合理。还是使用 *1 最佳。

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式