SQL order by 语句对null值排序

记order by 语句对null值排序:

MySQL:

  • 将null值放在最后
    select *
    from user
    order by if(isnull(sort), 1, 0),sort asc,publish_time desc;
    
  • 将null值放在最前
    select *
    from user
    order by if(isnull(sort), 0, 1),sort asc,publish_time desc;
    

Oracle:

oracle认为 null 最大。
升序排列,默认情况下,null值排后面。
降序排序,默认情况下,null值排前面。

(1)用 nvl 函数或decode 函数 将null转换为一特定值
(2)用case语法将null转换为一特定值(oracle9i以后版本支持。和sqlserver类似):

order by (case mycol when null then ’北京漂客’ else mycol end)

(3)使用nulls first 或者nulls last 语法。

这是oracle专门用来null值排序的语法。

  • nulls first :将null排在最前面。如:
select * from mytb order by mycol nulls first
  • null last :将null排在最后面。如:
select * from mytb order by mycol nulls last

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
posted @ 2022-08-18 14:57  ProsperousEnding  阅读(1177)  评论(3)    收藏  举报