1. 程式人生 > >mysql排序時null值或者空字串在最後

mysql排序時null值或者空字串在最後

使用mysql排序時如果是是降序排序null值或者是空字串是可以排在最後面的,但是升序排序時就null值或者是空字串就會排在最前面了。

看到其他人說可以使用is null 來進行判斷,如圖所示: 可以看到is null確實可以解決值為null排在前面的問題,但是如果值是空字串進行升序排序的時候還是排在最前面,此時可以使用下面的語句進行排序:

select * from category order by isnull(name) || name='' asc, name asc

此時的排序結果如下:

這裡通用的語法規則是:

order by isnull(#{sortFieldName}) || #{sortFieldName}='' asc, #{sortFieldName} #{sortType}

這裡使用到了如下知識點:

  • isnull(express)函式,該函式的作用是如果express為空,那麼返回值是1,如果express不為空,那麼返回值是0
  • #{sortFieldName}='',如果排序欄位的值是空字串,那麼返回1,如果不是並且非null返回0,如果是null則返回null
  • 雙重排序,也就是無論我們想要對那個欄位是降序排序還是升序排序,對於
    	isnull(#{sortFieldName}) || #{sortFieldName}='' asc
    
    始終都是升序排序,由於經過isnull函式和與空字串比較的操作後,只有排序的那個欄位為空或者是空字串那麼結果就是1,對於正常的資料結果則是0,然後對於這些0與1的結果進行升序排序,那麼0自然就是排在前面,也就是正常的資料肯定是排在前面的,然後再進行升序或者降序的第二重排序就可以得到我們想