在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。 为了处理这种情况,MySQL提供了三大运算符:
关于 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> 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对极客世界的支持。 |
请发表评论