这是SQLite的正确语法,使空值出现在最后吗?

时间:2013-10-28 08:08:04

标签: sqlite null

select * from table1
order by case Language when null then 1 else 0 end, Language

无论我使用哪种方式,它始终首先显示空值。是否有一种标准方法允许非空值采用排序优先级?

谢谢你们

3 个答案:

答案 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子句使用两个字段:

  1. Language IS NULL OR Language=''。这是一个布尔表达式(在SQLite中产生0(false)或1(true)),与(Language IS NULL) OR (Language='')

  2. 相同
  3. 当第一个字段的结果相同时,会使用第二个字段:Language

  4. 这样,只要LanguageNULL或空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