2010-12-06 21 views
0

私はAndroidアプリケーションでSQLite DBを使用しています。SQLite並べ替えの質問

列に数字と文字列があります。以下のようなもの:

3、1、2、6/6、X、3A、10、12、XY、44、ZW

私はこの列の値を選択し、それらを並べ替えた場合、Iを得る:

1、10、12、2、3、図3A、44、6/6、X、XY、ZW

私が得るであろうので、これらの値をソートするSQLiteの内の任意の可能性がある:

1,2,3,3A6/6A、10,12,44、X、XY、ZW

(現在の文字列としてすべてを格納している)の数値として数値を格納するだけで、必要に応じてあなたが純粋な数字と純粋な文字列を並べ替えることができます

ムール

答えて

1

1つの選択肢は、(修飾されていない他の値と共に)ソート列にそれを数字の接頭辞を抽出して記憶することです多くの実験の後、私は適切なクエリを得ました:

select _id, case 
when cast(_id as number) = 0 then _id 
when cast(_id as number) <>0 then cast(_id as number) 
end as sorting 
from lines 
order by sorting 

良いことは、6/6A '6のためにキャスティング操作が戻ってくることです。

UPD

はなぜ分からないのですが、私は私のアンドロイドアプリケーションでこのクエリを使用している場合、私は数として_id列を取得するので、私はテキストにキャストを行う必要があります

select cast(_id as text) as _id, case 
when cast(_id as number) = 0 then _id 
when cast(_id as number) <>0 then cast(_id as number) 
end as sorting 
from lines 
order by sorting 
1

、ありがとうございます。

ハイブリッド(3Aおよび6A)はトリッキーである。

original sort 
    1  1 
    2  2 
    6A  6 
    6  6 
    3A  3 
    X  X 
    XY  XY 

そして元のカラムに続くソート列で順:

SELECT * FROM MyTable 
ORDER BY sort, original 
+0

をあなたが意味するか、私はshoulことdは数字と文字列のための異なるテーブルを持っていますか?ユニオンを使うだけですか? – Tima

+0

いいえ、1つのテーブル。 SQLiteは、複数の型を1つの列に格納するのは完全にうれしいです。 –

+0

申し訳ありませんが、わかりませんが、わかりました。テーブルの作成方法を変更する必要がありますか?または数字が文字列として保存されている場合でも、既存のデータを使用できますか?または、「数値を数値として格納する」という意味は何ですか? – Tima

0

TIMAとマルセロ・カントスのソリューションに触発され、私は、次の解決策が見つかりました:

SELECT * FROM MyTable ORDER BY CAST(original AS INTEGER), original;

関連する問題