2012-01-02 8 views
0

私はString形式(DD/MM/YYYY)の日付が含まれていString列を持つデータベースを作成している動作しません。私は2つの指定された日付の間にあるそのテーブルからデータをフェッチしたいと思いますが、私は以下のクエリで試してみましたが、選択した月と年の間に何の違いもありません。 "dd/mm/yy"の "dd"フィールドのみを比較します。Sqliteをクエリが正しく

以下のクエリは、すべての月と年から25に14日目の間にあるすべてのデータが表示されます。私は、指定された日付、月、年の間のデータが必要です。

Select * from RunningLog 
where CAST(RunDate AS DATETIME) between CAST('14/04/2011' AS DATETIME) and 
     CAST('25/04/2011' AS DATETIME) 

答えて

0

sqlite3のドキュメントは、日時をキャストすることができます言っていない:http://www.sqlite.org/lang_expr.htmlキャスト式数字を参照してください)。なぜあなたはJavaからそれをしないのですか?つまり、データベースに日付をどのように格納していますか?私は長い間(Unix時間)保存することを強くお勧めします。そうすれば、正確な日時を表す2つの長い数字を簡単に取得し、それらを使ってテーブルを照会することができます。

0

Recomendation:タイムライブラリとしてデータベースとJodaTimeで使用日時フィールド。

は、DateTimeオブジェクトに日時を解析するのはとても簡単ですし、あなたが比較し、日付と仕事をする多くの有用なメソッドを持っています。

また、SQLクエリが優れています。

1

日付がある(あるいはされていない)sqlite3の中に保存されたかについての私の答えhereを参照してください。 Sqliteには日付フィールドがないため、実際には文字列として格納されます。これをソート/フィルタリングしようとするのは難しいでしょう。代わりにintフィールドを使用し、時間をミリ秒単位で保存します。

私はDBから引っ張ったときにフォーマットするに建てられた日付と時刻の関数を使用し、その後、INTEGER/Unixの時間記憶を好みます。

例:整数としてデータベースに

long millis = Calendar.getTimeInMillis(); 

ストアミリ。次に、sqlite3で日付と時刻関数を使用する方法の最初のリンクを参照してください。

0

2つの日付の間の秒数を計算できます。次に例を示します。 SELECT strftime( '%s'、 'now') - strftime( '%s'、 '2004-01-01 02:34:56');

違いの兆候に基づいて、ある日付が別の日付より前であると言うことができます。あなたの場合、2つの比較を行う必要があるので、2つの違いの兆候を確認する必要があります。他の例を見つけることができます。他の例もあります(http://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions)。