2017-09-20 6 views
0

私は、SQLを使用して、SQLLite dbから最後の31日間のデータを取得しようとしています。私はすでにGoogleを検索し、さまざまなオプションを試してみましたが、すべてのSQLはうまくいきますが、私は期待どおりの結果を得ていません。下のスクリーンショットの例では、あなたはAndroid SQLLite current_timestampカラムからの最後の31日間のデータ

SELECT * FROM transactions WHERE TIMESTAMP > (SELECT DATETIME('now', '-30 day')) 

enter image description here

+0

あなたはデータベースにタイムスタンプを保存していますか?はいの場合は、現在の日付と時刻のスタンプとそれからマイナス31日を単に計算し、SQLクエリ –

+0

のように保存されたタイムスタンプと比較してくださいこのクエリを試してください 'SELECT * FROM transactions WHERE date datetime BETWEEN datetime( 'now'、 '-31 days')そして、日時( 'now'、 'localtime') ' –

+0

Upendra私は、これらすべてのオプションを試してみましたが、何かが怪しいので、私は記録を得ていません。既に存在するものがあるにもかかわらず... – Akshay

答えて

2

..私は私がここで行方不明ですかわからないです...私は何も結果を返しません。18 - 9月が、SQLのレコードを持っています表示されます直接タイムスタンプ比較の代わりにbetweenを使用する -

SELECT * FROM transactions WHERE TIMESTAMP BETWEEN datetime('now', '-31 days') AND datetime('now', 'localtime') 

これは、SQLliteが日付をString形式で格納し、標準のDateTime形式を持たないためです。したがって、Stringの直接比較は失敗します。したがって、datetime関数を使用して既存の値と日付を比較すると便利です。

+0

これも試しましたが、何の記録も出ません。あなたがスクリーンショットで見るように、私は1つのレコードマッチングを持っていますが、私はこのSQlを実行すると引っ張られません。 – Akshay

+0

@Akshay何も魚がいません。そのタイムスタンプ形式です。 SWL LiteはMMMタイプのフォーマットをサポートしていません。月を数値にするようにMM型に変更してください。これ以上のフォーマットを確認してください - https://www.sqlite.org/lang_datefunc.html –

+0

ありがとうKapil、私は問題を発見しました...ここでの問題は、レコードが作成されるたびに、dedefualt idが持っていなかったときにcurrent_timestampを挿入することです。任意のデータ型。データ型を作成した後、私はすべてのSQLが動作しているのを見ることができました...私はその列のデータ型がなかったときにSQLLiteがどのようにこのテーブルを作成したのでしょうか?私はそれが私にエラーを与えるべきだと思った... – Akshay

関連する問題