如何在SQLite中执行NULLS LAST?

问题描述 投票:24回答:7

我想对结果进行排序,最后所有NULL列(NULLS LAST),如SQL:2003 extension T611中所指定。可悲的是,SQLite似乎不支持它。有一个聪明的解决方法吗?

sql sqlite null
7个回答
23
投票

这行得通吗?

SELECT ....... ORDER BY COALESCE(col1,col2,col3,etc) IS NULL

我对您的措辞“最后所有NULL列都感到困惑”。如果您希望所有NULL值都位于特定列中,请使用以下方法:

SELECT ....... ORDER BY col1 IS NULL

20
投票

虽然我有点喜欢Blorgbeard的回答,但此变体不关心提供正确的数据类型的有效“假”值。

ORDER BY CASE WHEN SOMECOL IS NULL THEN 1 ELSE 0 END, SOMECOL

或者,即使您要使用伪造的值,我也希望IFNULL

ORDER BY IFNULL(SOMECOL,-9999)

正如Michael指出的,SQLite使用IFNULL。您也可以使用ANSI-SQL通用版本COALESCE


4
投票

您可以执行以下操作来伪造它:

select * from test
order by case ordercol when null then 1 else 0 end, ordercol 

2
投票

我遇到了同样的问题。我发现这可行:

((我没有找到SQLite的任何isnull函数)

order by ifnull(column_what_you_want_to_sort,'value in case of null')

0
投票

我的解决方案是反转priority列的范围并使用order by desc(以降序排列)。一口气将null放在末尾。

显然,这只有在您控制priority排序列时才有效,但是如果您可以摆动它,那就太好了!

如果不起作用,我发现并集查询有效。只需union两个查询,然后在第一个查询上添加约束where not null,在第二个查询上添加约束where null。第二个查询将在第一个查询的末尾。


0
投票

就我而言,我想先对NULL列进行降序排序。我在查询后从while循环中将记录添加到列表中,因此我只是检查该列是否为NULL并使用ArrayList.add(0, Object)实现此目的。


0
投票

SQLite 3.30.0+支持NULLS FIRST/LAST子句。

Release History (v3.30.0 - 2019-10-04)

  1. [在ORDER BY子句中添加对NULLS FIRST和NULLS LAST语法的支持。

ORDER BY

SQLite出于排序目的,认为NULL值小于任何其他值。因此,NULL自然会出现在ASC排序开始时和DESC排序结束时。 可以使用“ ASC NULLS LAST”或“ DESC NULLS FIRST”语法进行更改。

© www.soinside.com 2019 - 2024. All rights reserved.