我有一个名为messages
的表,它存储来自聊天的消息,其中包含以下列:username, message, datetime
,其中日期时间的类型为TEXT,并以下列格式存储:“yyyy / MM / dd hh:mm:ss“。我想检索特定时间范围内的平均行数,而不必担心日期。例如:
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 :(得分:0)
如果我正确阅读了您的问题,您希望在WHERE
和12
小时之间使用13
子句限制在2016年任何日历日期。在这种情况下,您可以使用STRFTIME
从datetime
列中以字符串格式提取年份和小时。
SELECT COUNT(message)
FROM messages
WHERE STRFTIME('%Y', datetime) = '2016' AND
STRFTIME('%H', datetime) < '13' AND
STRFTIME('%H', datetime) > '12'
请注意,不等式应该与字符串一起使用的原因是因为数字字符串仍然基于它们的词典顺序排序。
<强>更新强>
由于您的日期时间列采用非标准格式,因此您可以通过在WHERE
子句中对需要使用的各种部分进行子字符串处理来解决此问题:
SELECT COUNT(message)
FROM messages
WHERE SUBSTR(datetime, 1, 4) = '2016' AND
SUBSTR(datetime, 12, 2) < '13' AND
SUBSTR(datetime, 12, 2) > '12'