Mysql實現null值排在最前或最後
最近在做專案遷移,Oracle版本的遷到Mysql版本,遇到有些oracle的函式,mysql並沒有,所以就只好想自定義函式或者找到替換函式的方法進行改造。
oracle做資料排序的時候,有時候可以用nulls first或者nulls last將null值排在最前或者最後。
oracle方法:
null值排在最前
select * from A order by a desc null first
null值排在最後
select * from A order by a desc null last
不過遷到Mysql的話,mysql並沒有提供類似函式,所以要怎麼實現?下面給出解決方法:
null值排在最後,用Mysql的IF和ISNULL函式。如果為空返回1,否返回0
select * from A order by IF(ISNULL(a),1,0),a desc
null值排在最前,用Mysql的IF和ISNULL函式。如果為空返回1,否返回0
select * from A order by IF(ISNULL(a),0,1),a desc
如果mybatis裡需要oracle和Mysql版本的,或者可以從後臺傳個數據表版本標識dbType,或者直接用mybatis的_databaseId方法。
<if test="dbType=='oracle'"> order by c.create_date desc nulls last </if> <if test="dbType=='mysql'"> order by IF(ISNULL(c.create_date),1,0), c.create_date desc </if>