Mysql中字段为null和字段为‘‘的排序

这篇博客讨论了在MySQL中如何处理字段值为NULL或空字符串''时的排序问题。通过示例展示了不同的SQL查询方式,包括直接排序、数值转换以及使用CASE语句。最终,通过CASE语句将NULL和空字符串转换为0进行排序,实现了预期效果。这种方法确保了NULL和空字符串在排序时被视为相同值。
摘要由CSDN通过智能技术生成

        在Mysql中,如果有一个字段的值可能为null或者为空''时(如下图),如何让值为null和值为''的排序是一样。

        我们想要的排序是先按boxNum的顺序,再按pieceNum(注意是字符串类型)顺序来进行排序,而且那我们应该怎么写呢?

第一种:

select boxNum,pieceNum 
from whg_daxt_records_text_file r where pieceNum in ('001','002','071') 
and year(r.fileYear) = 2021 and typeNum = 'A' and keeptype_id = 8 order by boxNum asc, pieceNum asc

结果: 

显然结果是没有达到我们想要的结果。

第二种:

select boxNum,pieceNum 
from whg_daxt_records_text_file r where pieceNum in ('001','002','071') 
and year(r.fileYear) = 2021 and typeNum = 'A' and keeptype_id = 8 order by boxNum asc, pieceNum+0 asc

结果是跟第一种一样,显然也是做不到我们想要的效果。

第三种:

select boxNum,pieceNum 
from whg_daxt_records_text_file r where pieceNum in ('001','002','071') 
and year(r.fileYear) = 2021 and typeNum = 'A' and keeptype_id = 8 
order by case when boxNum is null then 0 else boxNum+0 end asc, pieceNum+0 asc

结果: 

现在这种写法,已经可以实现我们的需求了,为什么这种写法可以呢?

我把现在的boxNum的排序号也输出,大家就清楚了。

select boxNum,pieceNum,case when boxNum is null then 0 else boxNum+0 end as 'boxNum_order' 
from whg_daxt_records_text_file r where pieceNum in ('001','002','071') 
and year(r.fileYear) = 2021 and typeNum = 'A' and keeptype_id = 8 
order by case when boxNum is null then 0 else boxNum+0 end asc, pieceNum+0 asc

 

 由结果中可以看出,null和''的排序都变成了0。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrZhouGx

觉得对你有用的话可以支持一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值