Mysql实现null值排在最前或最后

Posted SmileNicky的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>



以上是关于Mysql实现null值排在最前或最后的主要内容,如果未能解决你的问题,请参考以下文章

MySql排序查询将null放在最后的解决办法(默认会在最前,当成最小值处理)

SQL Server 排序的时候使 null 值排在最后

SQL Server 排序的时候使 null 值排在最后

mysql 等 null 空值排序

MySQL 将某个字段值排在最后,其余记录单独排序

[SQL] 让特定的数据 排在最前