您现在的位置是:群英 > 数据库 > MySQL数据库
MySQL下null值怎么实现排在最前边
Admin发表于 2022-04-27 16:44:031271 次浏览
这篇文章主要给大家介绍“MySQL下null值怎么实现排在最前边”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“MySQL下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>

总结


到此这篇关于“MySQL下null值怎么实现排在最前边”的文章就介绍到这了,感谢各位的阅读,更多相关MySQL下null值怎么实现排在最前边内容,欢迎关注群英网络资讯频道,小编将为大家输出更多高质量的实用文章!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: mysql null值
相关信息推荐
2022-05-16 09:57:07 
摘要:最近遇到一个网站卡死的问题,从脚本中发现有个sql执行效率很慢,后来将or改为in,效率提升了几百倍。那么MySQL中in为何比or的效率高呢?原因是什么?接下来我们一起来探讨一下。
2022-04-27 16:44:00 
摘要:给大家带来一篇关于远程连接mysql数据库知识点及注意事项的相关教程文章,内容涉及到远程连接、mysql数据库、远程连接mysql数据库注意点记录等相关内容,更多关于远程连接mysql数据库注意点记录的内容希望能够帮助到大家。
2022-08-03 17:48:08 
摘要:在oracle中,sql语句里的in用于对某个范围内的数据进行操作,指定的字段值只需要满足这个范围内的任意一个即可,语法为“select * from 表名 where 字段 in (value1,value2,…);”。
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部