欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql实现null值排在最前/最后的方法示例

程序员文章站 2022-03-27 12:01:52
前言 我们已经知道 mysql 使用 sql select 命令及 where 子句来读取数据表中的数据,但是当提供的查询条件字段为 null 时,该命令可能就无法正常工...

前言

我们已经知道 mysql 使用 sql select 命令及 where 子句来读取数据表中的数据,但是当提供的查询条件字段为 null 时,该命令可能就无法正常工作。

为了处理这种情况,mysql提供了三大运算符:

  • is null: 当列的值是 null,此运算符返回 true。
  • is not null: 当列的值不为 null, 运算符返回 true。
  • <=>: 比较操作符(不同于=运算符),当比较的的两个值为 null 时返回 true。

关于 null 的条件比较运算是比较特殊的。你不能使用 = null 或 != null 在列中查找 null 值 。

在 mysql 中,null 值与任何其它值的比较(即使是 null)永远返回 false,即 null = null 返回false 。

mysql 中处理 null 使用 is null 和 is not 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>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。