在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 版权协议,转载请附上原文出处链接和本声明。