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

  • Post author:
  • Post category:mysql

        在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。

 


版权声明:本文为qq_27387133原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。