Mysql实现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>

原文地址:https://www.cnblogs.com/mzq123/p/10381211.html

时间: 2024-10-07 17:48:23

Mysql实现null值排在最前或最后的相关文章

Mysql 排序null值 排序问题分析

mysql中null值的排序问题分析 如下表t_user: name age zhangsan 1 lisi NULL wangwu 2 www.2cto.com 执行一下sql: Sql代码 select * from t_user order by age; name age lisi NULL zhangsan 1 wangwu 2 实际上我们是想将没有填写age的记录放在最后,我们可以 Sql代码 select * from t_user order by age is null, ag

mysql排序null值

从现实项目需求出发:有一张城市表:里面有北京.上海.广州.河北.天津.河南6座城市: mysql> select * from bjy_order; +----+------+ | id | city | +----+------+ | 1 | 北京 | | 2 | 上海 | | 3 | 广州 | | 4 | 河北 | | 5 | 天津 | | 6 | 河南 | +----+------+ SQL Copy 要求是让上海排第一个.天津排第二个:最简单粗暴的方法就是添加一个order_number

SQL Server 排序的时候使 null 值排在最后

最近遇到一个 SQL Server 排序的问题,以前也没了解过,然后这次碰到了. 才发现 SQL Server 排序的问题,在指定的排序列中 null 值会默认排在最前面,因为在 SQL Server 中 null 值默认为最小值. 后来问了一下万能的百度,找到了下面一种比较简单的处理方法. 首先建了一个表插入了一些测试数据. create table UserInfo ( UserInfoID int not null identity(1,1) primary key, User_No in

MySQL的NULL值处理

我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. 为了处理这种情况,MySQL提供了三大运算符: IS NULL: 当列的值是NULL,此运算符返回true. IS NOT NULL: 当列的值不为NULL, 运算符返回true. <=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true. 关于 NULL 的条件比较运算是比较特殊的.你不能使用 = NUL

MYSQL中NULL值的运算

今天更新MYSQL数据库一个的表的某个字段,涉及到子查询 UPDATE t1 SET points = ( points - ( SELECT sum(point) FROM t2 WHERE t2_id NOT IN (1, 2, 3, 4) ) ); 结果是求和的子查询得到的值是NULL,然后t1表的points都成了NULL了 在MYSQL里测试了一下,在MYSQL中,任何值和NULL的运算得到的值都是NULL SELECT 100+NULL; SELECT 100-NULL; SELEC

MySQL中null值问题

今天写答疑系统的时候,写了这样一截代码: <?php session_start(); $db=mysqli_connect('localhost','root','root','qa'); $tname=$_POST['teacher']; $q="select schedule,place from time where Tname='$tname' and Sname is null"; $arr=mysqli_query($db,$q); echo "您选择了&

MySQL中order by中关于NULL值的排序问题

MySQL中order by 排序遇到NULL值的问题 MySQL数据库,在order by排序的时候,如果存在NULL值,那么NULL是最小的,ASC正序排序的话,NULL值是在最前面的. 如果我们想让NULL排在后面,让非NULL的行排在前面该怎么做呢? MySQL数据库在设计的时候,如果字段允许NULL值,那么对该字段进行排序的时候需要注意那些值为NULL的行. 我们知道NULL的意思表示什么都不是,或者理解成"未知"也可以,它与任何值比较的结果都是false, 默认情况下,My

mysql 等 null 空值排序

[sqlserver]: sqlserver 认为 null 最小. 升序排列:null 值默认排在最前. 要想排后面,则:order by case when col is null then 1 else 0 end ,col 降序排列:null 值默认排在最后. 要想排在前面,则:order   by case when col is null then 0 else 1 end , col desc [oracle]: oracle认为 null 最大. 升序排列,默认情况下,null值

Sql与oracle中null值的区别

原贴链接请点击: 1 null值的介绍 NULL 是数据库中特有的数据类型,当一条记录的某个列为 NULL ,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此, NULL 并不是一个确定的值. 这是 NULL 的由来.也是 NULL 的基础,所有和 NULL 相关的操作的结果都可以从 NULL 的概念推导出来. 2 oracle中的null值介绍 在不知道具体有什么数据的时候,即未知,可以用NULL, 称它为空,ORACLE中,含有空值的表列长度为零.允许任何一种数据