视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Mysql实现null值排在最前/最后的方法示例
2020-11-09 20:20:56 责编:小采
文档


前言

我们已经知道 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>

    总结

    下载本文
    显示全文
    专题