2016-08-01 102 views
1

我有一個表messages,用於存儲來自聊天的郵件,其中的日期時間類型爲TEXT,並以下列格式存儲:username, message, datetime :「yyyy/MM/dd hh:mm:ss」。我想檢索特定時間範圍內的平均行數,而不打擾日期。例如:SQlite:選擇特定時間範圍內的行,忽略日期

SELECT avg(count(message)) 
FROM messages 
WHERE datetime < "2016/mm/dd 13:00:00" AND 
     datetime > "2016/mm/dd 12:00:00" 

是否有一些運算符允許任何字符代替「mm」和「dd」。從本質上講,我試圖構造一個查詢來檢索特定時間範圍內的平均消息量,而不是特定日期消息的數量。

回答

0

如果我正確地讀你的問題,你想用你的WHERE子句1213小時之間限制任何日曆日期在2016年。在這種情況下,您可以使用STRFTIMEdatetime列中提取字符串格式的年份和小時。

SELECT COUNT(message) 
FROM messages 
WHERE STRFTIME('%Y', datetime) = '2016' AND 
     STRFTIME('%H', datetime) < '13' AND 
     STRFTIME('%H', datetime) > '12' 

注意的是,雖然不平等應處理字符串的原因是因爲數字串排序還是基於他們的lexigraphical順序。

更新:

由於您的datetime列是非標準格式,您可以通過substringing關閉你所需要的WHERE子句中使用的各個部分來解決此:

SELECT COUNT(message) 
FROM messages 
WHERE SUBSTR(datetime, 1, 4) = '2016' AND 
     SUBSTR(datetime, 12, 2) < '13' AND 
     SUBSTR(datetime, 12, 2) > '12' 
+0

似乎sqlite只接受日期時間格式爲「YYYY-MM-DD HH:MM:SS.SSS」,連字符分隔年份,月份和日期,而我的日期時間字符串使用正斜槓格式化。 –

+0

@ J.Doe然後你應該把你的日期時間轉換成適當的格式。它會讓你的生活更輕鬆。沒有這個,你需要一些非常難看的字符串操作來解決這個問題。 –

+0

我是否需要編寫一個程序來遍歷每個表條目並相應地重新設置日期時間字符串的格式,或者有一種方法可以通過一個sqlite查詢一舉完成?此外,當我嘗試使用AVG功能時,會出現「聚合」錯誤。 COUNT(消息)僅返回一個整數,表示尊重WHERE子句的條目數量,但僅使用此信息無法執行平均計算。爲了執行平均計算,需要知道的天數。 –

相關問題