Mysql實現null值排在最前或最後
阿新 • • 發佈:2019-02-15
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值排在最前或最後