我有一个应用程序,我命令使用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);
}
答案 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。这样您就不应该从查询中获取任何空值。