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

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

Mysql中字段为null和字段为‘‘的排序_第1张图片

        我们想要的排序是先按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

结果:Mysql中字段为null和字段为‘‘的排序_第2张图片 

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

我把现在的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。

 

你可能感兴趣的:(数据库,mysql)