2011-01-06 5 views
3

私はORDER BY句を使って自分のデータベースにクエリを作成するアプリケーションを持っています。アルファベット順に並べ替えられます。私は1つの小さな問題があるだけですが、それはかなり頻繁にクエリの順序では、文字列のいずれかが含まれています(文字列= "")アルファベット順に並べ替えるときは、リストの先頭に値を取得するinfront om a、b、 C ...私は平易で単純なことはしたくない。私がオラクルフォーラムで見つけたたくさんの検索の後、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

なぜCPUがあなたに代わって文字列 "、"と ""を連結するのですか? – Hogan

+0

待ち、フィールドに空文字列( '" "')または実際の 'NULL'sが含まれていますか? –

+0

空の文字列であることがより明確になっているはずです – Emil

答えて

8

ので、それはその後、実際の列、最初のヌルによって順序付け

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

のようなあなたのORDER BY

CASE同等のものを使用します。

編集: ""(空白の文字列)などをフィルタリングしたい場合は、同じ方法を使用して数値を割り当て、アルファベット順に並べ替えることができます。

EDIT2:フィールドがNULLでない場合の追加について

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

は実装方法を誤解している必要があります。投稿したクエリに変更を加えて再投稿できますか?ありがとうございます! – Emil

+0

私はさらに多くのクエリ情報を追加しましたが、それはあなたのDBに依存します...私の例はSQL Server用です....別のDBは 'CASE'と同等のものがあります – Matthew

+0

ありがとう! 、私はそれをより一見に見て:) btw私はsqlliteデータベースを使用しています。何か私は明確にすることを忘れていたのは、私が並べ替えている文字列が空で、nullではないということでした。 – Emil

0

方法。この方法では、クエリからヌル値を戻すべきではありません。

+1

私は、フィールドがヌルで、最後にソートされたレコードを望んでいると推測します。 –

+1

正確には、私はまだ彼らが他の情報を保持しているので、null値でそれらを取得したい:)最初にそれらを最後にしてほしくない^^ – Emil

+1

woops申し訳ありません。あなたの質問を間違って読んでください。私はマシューズの答えに投票する! – justinl

1

策1:

ORDER BY foo NULLS LAST 

ORDER BY foo NULLS FIRST 

しかし、これは数値列で動作するようです:(

対処方法2:

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

これは、my_fieldがnullであるかどうかに応じて0または1からなる「偽の」列を作成し、それをソートします。 nullでないフィールドが最初に来ます。 2番目のステップでは、SQLは前と同様にmy_fieldをソートします。

関連する問題