mysql查询varchar类型字段,内容有中文+数字组合时候排序按照ascall值导致xxx18排起来比xxx5要小的问题

业务需要,查询时候按照设备名称排序,直接排序发现会出现问题:

 很明显,终端10不应该出现在终端2前面,这个是因为排序是一个一个位往后移去比较大小的,移到第三位时候终端10是“1”,终端2是“2”,所以会判断终端10比较小,这显然不符合业务需求,

于是上网查了一下,一开始想用内置函数配合正则把数字提取出来,但是mysql库是5.7没有这些函数,有一些是通过截取得到数字转换类型比较的,那样的话只适合固定格式的,

最后找到可以利用LENGTH方法来分组,LENGTH获取当前字段内容长度:

SELECT
    dev_name ,LPAD( dev_name,3, '0' )
FROM
    common_device_info 
    where fac_id='e5fa2b9f-fd15-4cb1-9639-4c2f6b1d8c0b'
ORDER BY
    LENGTH( dev_name ),dev_name

 最后也就实现了需求,LPAD是填充格式化,也是过程中为了实现排序搜到的,可以设置第二个参数很大很大,格式化之后长度相同再来排序,但是长度要写死,感觉总归是不太好,还是通过长度和设备名称同时排序普适性比较高一些。

posted @   浮笙芸芸  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示