如何在末尾为null的情况下执行Order By



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

我需要什么

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

我得到的

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

它是否可以在不调用2个查询的情况下执行,或者添加一个额外的列并使用then-order。。

tnx

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

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

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

对于sql server:

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

试着用订单中更有意义的东西替换null值。所以

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

相关内容

最新更新