1. 程式人生 > >Mysql實現null值排在最前或最後

Mysql實現null值排在最前或最後

select oracle版本 oracle rst 返回 base myba 數據表 遷移

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

Mysql實現null值排在最前或最後