NULL值排序处理

1.1. NULL值排序

1.1.1. 前言

起因是对一个表单数据有新增一个日期字段的要求,新增数据后由于原先数据存在很多空值,导致对日期进行降序时,有日期的数据就会排在底部,显然不是我们想要的。

select date from example order by date  desc;

1.1.2. 通过关键字NULLS LAST处理

SELECT *
FROM example
ORDER BY column_name NULLS LAST;

多列排序示例

SELECT *
FROM example
ORDER BY column1 DESC NULLS LAST, column2 ASC NULLS LAST;

此查询首先对 column1 按降序排序,并将其 NULL 值放在最后;然后对 column2 按升序排序,同样将其 NULL 值放在最后。

1.1.3. 通过coalesce函数

通过coalesce函数也可以解决这个问题,COALESCE是一个函数, (expression_1, expression_2, ...,expression_n),其中依照参数顺序,取第一个不为null的值。也就是说,进行排序时可以对排序字段进行判断,若所有字段都为NULL时,则返回NULL。

--排序时若存在date为NULL则替换为空字符串''
select date  from example order by  coalesce(date,'')  desc;

1.1.4. 针对空字符串''

COALESCE 函数用于 “替换 NULL”,但可扩展为替换空字符串,将其映射为一个比所有可能非空字符串都大的值(如 'zzzzz'):

--升序:空字符串替换为 'zzzzz',排在最后
SELECT * FROM example 
ORDER BY 
  COALESCE(NULLIF(content, ''), 'zzzzz') ASC  -- NULLIF(content, ''):将 '' 转为 NULL,再用 'zzzzz' 替换
NULLS LAST;  -- 原 NULL 也替换为 'zzzzz',排在最后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值