SQL中如果varchar存的数字,但是排序混乱怎么办?来看看解决思路

起因:上午leader给我发消息说,上次的排序功能有问题,我心想不可能,看到截图我懵了

他竟然是以一种用开头的数字来排序的,即:1,10,11,12,13,14,2,3,4,5 等等

我心想,这也太假了吧,这个接口我反复和前端测试过好几遍都是没有问题的

预算我直接进入 数据处理层想一探究竟,于是我复制SQL打开了数据库管理工具

重新执行了一遍,依然是乱序,我一想这不太对呀,其他的都能正常,为什么唯独他不行呢

于是我查看了表的DDL语句:

`orders` varchar(8) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '顺序字段',

看到了,他的类型竟然是varchar类型的

问题找到了

但是我回想了一下,这个字段是在我打算添加之前就有了,是别的同事添加的,我直接复用的。

当时创建这个字段的时候没有跟同事之间做好协调,导致成这样。

这个表是否要修改,如果要修改,牵连了哪些东西,会不会产生其他的问题。

考虑到,如果一旦修改本地库和生产库都得进行修改,而且前后端的字段类型都得就行修改,可能会导致牵一发而动全身。

于是我想着如何在修改不修改表的情况下,将执行的orders字段准换成 可排序类型,在做排序

CAST()方法,应运而用

我先给大家介绍一下,例如:CAST(orders AS UNSIGNED) ;

CAST就是方法名, orders就是数据库排序字段名,AS 代表转换(通常是起别名的意思),UNSIGNED 是 无符号整数。于是我就使用了该方法进行测试,接下来请看前后对比。

所有呀,以后在纯数字排序的时候,切记要和其他同时做好协调,以免增加工作量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值