select * from table1
order by case Language when null then 1 else 0 end, Language
无论我使用哪种方式,它始终首先显示空值。是否有一种标准方法允许非空值采用排序优先级?
谢谢你们
答案 0 :(得分:15)
您不需要WHEN
:
SELECT * FROM table1
ORDER BY Language IS NULL, Language
运算符IS
将返回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
为NULL
或空TEXT
,第一个字段就为1
,在其他结果之后依赖这些结果,评估为0
。然后,第二个字段用于对Language
具有内容的所有结果进行排序。
答案 1 :(得分:4)
检查is
null
运算符
select * from table1
order by case when Language is null then 1 else 0 end,
Language
答案 2 :(得分:0)
这是LS_dev对UNIONs的回答的扩展。不是一个好方法,但我无法找到任何其他方法使其工作,因为documentation说:
如果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