【问题标题】:How to do Order By with null at the end [duplicate]如何在最后使用 null 进行 Order By [重复]
【发布时间】:2021-02-09 11:15:52
【问题描述】:

我有一个包含测试日期列的学生表,我想创建一个按日期排序的查询 从最旧的第一个到新的,并且所有包含 null 的列都将是最后一个

我需要什么

01/01/2020
15/02/2020
null
null

我得到了什么

null
null
01/01/2020
15/02/2020

是否可以在不调用 2 个查询或添加一个附加列并使用 then order 的情况下执行此操作..

tnx

【问题讨论】:

  • 我找到了一个很好的答案,orderby x.date.HasValue desanding, x.date

标签: sql sql-server linq


【解决方案1】:

您可以通过CASE 表达式订购:

SELECT *
FROM yourTable
ORDER BY CASE WHEN date_col IS NOT NULL THEN 0 ELSE 1 END, date_col;

这种方法使用了两级排序,将所有非空日期记录放在首位,然后是空记录。在这两组中,我们按日期升序排序。

【讨论】:

  • case 表达式的结果值必须都是同一类型,因此 SQL 会将 1 或 0 转换为日期,这可能会给您带来意想不到的结果。
  • @Sean ...嗯,我使用的 CASE 表达式的唯一可能输出是 0 或 1。上次我检查它们都是整数,所以 ...
【解决方案2】:

对于 sql 服务器:

CREATE TABLE Test(
date datetime NULL
)


insert into Test (date)
values('2020-01-01'),
('2020-02-15'),
(NULL),
(NULL)


select * from Test
ORDER BY IIF(date IS NULL, 1, 0), date;

查看链接:https://rextester.com/CXK25023

【讨论】:

    【解决方案3】:

    尝试将 null 值替换为您的 order by 中更有意义的值。所以

    isnull(column1, '2100-01-01')

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 2021-12-13
      相关资源
      最近更新 更多