我的日期列有一些NULL
。我想按日期栏ASC订购,但我需要NULL
s在底部。如何在 TSQL 上执行此操作?
答案 0 :(得分:39)
在标准SQL中,您可以指定放置空值的位置:
order by col asc nulls first
order by col asc nulls last
order by col desc nulls first
order by col desc nulls last
但是T-SQL不符合此处的标准。 NULL的顺序取决于您是在T-SQL中升序还是降序排序:
order by col asc -- implies nulls first
order by col desc -- implies nulls last
使用整数,你可以简单地按负面排序:
order by -col asc -- sorts by +col desc, implies nulls first
order by -col desc -- sorts by +col asc, implies nulls last
但是这对于日期(或者那个字符串)来说是不可能的,所以你必须首先排序为null /不是null,然后只有你的列:
order by case when col is null then 1 else 2 end, col asc|desc -- i.e. nulls first
order by case when col is null then 2 else 1 end, col asc|desc -- i.e. nulls last
答案 1 :(得分:6)
Select *
From YourTable
Order By case when DateCol is null then 1 else 0 end
,DateCol
甚至是Order By IsNull(DateCol,'2525-12-31')
答案 2 :(得分:0)
order by case when col_name is null then 1 else 2 end, col_name asc
在Oracle上做了伎俩。但是,MS SQL Server上的相同内容会将NULL记录向下推,而将非null保留在结果集的顶部。
答案 3 :(得分:0)
这对我来说是成功的窍门。幸运的是,我正在处理文本。对于任何数字,我可能都会选择全9。 COALESCE(c.ScrubbedPath,'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz')
答案 4 :(得分:0)
有时,您可能需要使用子查询来做到这一点:
protected override void OnStop()
{
try
{
client.Close();
_shutdownEvent.Set();
hli_worker.Join(2000);
}
catch (Exception e)
{
...
}
}