2016-12-19 4 views
0

最後の24時間に1時間ごとに行を取得するクエリを作成したい。私の質問は、なぜ一方の方法が機能し、もう一方の方法が機能しないのかという点でより重要です。私は決定的な答えを見つけることができません。時間xと時間yの間のSqlite3

作品:

SELECT date, temp 
FROM dht_temps 
WHERE zone = 'outside' 
and temp <> 0 and date BETWEEN "2016-12-19 04:00:00" AND "2016-12-19 08:00:00" 

は動作しません:

SELECT date, temp FROM dht_temps 
WHERE zone = 'outside' and temp <> 0 
    and date BETWEEN date('now','-2 hours') 
    AND date('now','-1 hours') 

は両方とも同じ結果を生成する必要があることを私には思えるが、私はハックだ理由です。私はその理由を理解したいと思います。ありがとう

答えて

1

ではなくdatetime()に電話する必要があります。次の例では、datetime()を使用している間にdate()を使用するとゼロの結果がフェッチされることに注意してください。

import sqlite3 

conn = sqlite3.connect(":memory:") 
conn.execute('create table dht_temps (date TEXT, temp INTEGER, zone TEXT)') 
conn.execute('insert into dht_temps values(datetime("now"), 4, "outside")') 
conn.execute('insert into dht_temps values(datetime("now", "-30 minutes"), 1, "outside")') 
conn.execute('insert into dht_temps values(datetime("now", "-90 minutes"), 2, "outside")') 
conn.execute('insert into dht_temps values(datetime("now", "-150 minutes"), 3, "outside")') 
l1 = list(conn.execute(""" 
SELECT date, temp FROM dht_temps 
WHERE zone = 'outside' and temp <> 0 
    and date BETWEEN date('now','-2 hours') 
    AND date('now','-1 hours') 
""")) 

l2 = list(conn.execute(""" 
SELECT date, temp FROM dht_temps 
WHERE zone = 'outside' and temp <> 0 
    and date BETWEEN datetime('now','-2 hours') 
    AND datetime('now','-1 hours') 
""")) 

assert len(l1) == 0 
assert len(l2) == 1 
+0

ありがとうございます。私は日付と日時を見ていたはずです、それを逃した。 –

関連する問題