Mysql实现null值排在最前/最后的方法示例
前言
我们已经知道MySQL使用SQLSELECT命令及WHERE子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
- ISNULL:当列的值是NULL,此运算符返回true。
- ISNOTNULL:当列的值不为NULL,运算符返回true。
- <=>:比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。
关于NULL的条件比较运算是比较特殊的。你不能使用=NULL或!=NULL在列中查找NULL值。
在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回false,即NULL=NULL返回false。
MySQL中处理NULL使用ISNULL和ISNOTNULL运算符。
最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造。
oracle做数据排序的时候,有时候可以用nullsfirst或者nullslast将null值排在最前或者最后。
oracle方法:
null值排在最前
select*fromAorderbyadescnullfirst
null值排在最后
select*fromAorderbyadescnulllast
不过迁到Mysql的话,mysql并没有提供类似函数,所以要怎么实现?
下面给出解决方法:
null值排在最后,用Mysql的IF和ISNULL函数。如果为空返回1,否返回0
select*fromAorderbyIF(ISNULL(a),1,0),adesc
null值排在最前,用Mysql的IF和ISNULL函数。如果为空返回1,否返回0
select*fromAorderbyIF(ISNULL(a),0,1),adesc
如果mybatis里需要oracle和Mysql版本的,或者可以从后台传个数据表版本标识dbType,或者直接用mybatis的_databaseId方法。
orderbyc.create_datedescnullslast orderbyIF(ISNULL(c.create_date),1,0),c.create_datedesc
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。