select * from table1
order by case Language when null then 1 else 0 end, Language
无论我使用哪种方式,它总是首先显示空值。是否有标准方法允许非空值优先排序?
多谢你们
你不需要WHEN
:
SELECT * FROM table1
ORDER BY Language IS NULL, Language
运算符IS
将在 true 时返回 1,否则返回 0 ( Operators )。
编辑:处理空TEXT
,也:
SELECT * FROM table1
ORDER BY Language IS NULL OR Language='', Language
ORDER BY
子句使用两个字段:
Language IS NULL OR Language=''
. 这是一个布尔表达式(在 SQLite 中导致0
(false) 或1
(true)),与(Language IS NULL) OR (Language='')
当第一个字段具有相同的结果时,使用第二个字段:Language
.
这样,每当Language
isNULL
或 empty时TEXT
,第一个字段将是1
,在其他结果之后依赖这些结果,评估为0
。然后,第二个字段用于对所有Language
有内容的结果进行排序。
is
检查时必须使用运算符null
select * from table1
order by case when Language is null then 1 else 0 end,
Language
这是 LS_dev 对 UNION 的回答的扩展。不是一个好方法,但我想不出任何其他方法来使它工作,因为文档说:
如果 SELECT 是复合 SELECT,则不是输出列别名的 ORDER BY 表达式必须与用作输出列的表达式完全相同。
select * from (
SELECT * FROM table1 -- but this select can have union in it
) ORDER BY Language IS NULL or Language = '', Language