最近在做項目遷移,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>