在数据库查询中排序最后的空数据

时间:2011-01-06 22:25:38

标签: sql android

我有一个应用程序,我命令使用ORDER BY子句对我的数据库进行查询,它将按字母顺序对它们进行排序。我只有一个小问题,它经常发生,查询排序的字符串之一不包含任何内容(string =“”),当按字母顺序排序时,这些字符串填充在列表顶部的前面,a,b, c ...我很简单,不想要这个。在我在oracle论坛上发现的大量谷歌搜索后,我应该将查询的SORT BY部分更改为“SORT BY xxx ASC NULLS LAST”,这在查询时会导致致命的错误。

如何解决这个看似很小的问题?

这是我今天的查询语句。

public Cursor fetchAllDatesByTag() { return mdiktationsDb.rawQuery("SELECT " + KEY_DATEID + "," +" " + KEY_DATE + "," + " " + KEY_TIME + "," + " " + KEY_DICTTAG + "," + " " + KEY_DICTLISTIMAGE + " FROM " + DATABASE_TABLE + " ORDER BY " + KEY_DICTTAG + " ASC", null); }

3 个答案:

答案 0 :(得分:8)

CASE

中使用ORDER BY个等效项

喜欢

ORDER BY CASE column WHEN NULL THEN 1 ELSE 0 END, column

然后它首先按空值排序,然后按实际列排序。

编辑:如果你想过滤“”(空白字符串)或其他任何东西,你可以使用同样的方法......为它分配一个数值并在字母顺序排序之前进行排序。

EDIT2:

....+ " ORDER BY CASE " + KEY_DICTTAG + "WHEN NULL THEN 1 ELSE 0 END, " + KEY_DICTTAG + " ASC"

答案 1 :(得分:1)

解决方案一:

ORDER BY foo NULLS LAST

ORDER BY foo NULLS FIRST

但这似乎仅适用于数字列:(

解决方案二:

ORDER BY IF(ISNULL(my_field),1,0),my_field

将创建一个只包含0或1的“假”列,具体取决于my_field是否为null或非空,并对其进行排序。非空的字段将首先出现。在第二步中,SQL将像以前一样对my_field进行排序。

答案 2 :(得分:0)

如何添加WHERE字段IS NOT NULL。这样您就不应该从查询中获取任何空值。